Как получить имя текущего пользователя в настраиваемом действии для установщика Windows? - PullRequest
11 голосов
/ 21 декабря 2009

Мне нужно получить имя пользователя, запустившего инсталлятор для моего пользовательского действия по установке. Поскольку установщик получает специальные привилегии, Environment.UserName просто выдает «SYSTEM».

Environment.SpecialFolders.ApplicationData возвращает папку appdata текущих пользователей, но я не могу надежно извлечь из нее имя пользователя.

Больше спецификаций дела:

Использование проекта установки Visual Studio 2008 Настраиваемое действие - это класс установщика, запускаемый после установки, и единственный в проекте.

Ответы [ 5 ]

8 голосов
/ 17 февраля 2011

Вы можете получить некоторую информацию из переменных окружения. Я использую

Environment.GetEnvironmentVariable ( "USERNAME");

чтобы получить текущее имя пользователя.

3 голосов
/ 18 февраля 2011

В принципе, вы не можете.

UAC в MSI Notes: приглашение и разрешения для учетных данных объясняет некоторые из них более подробно, но фактически после того, как вы повысили свои учетные данные, текущий зарегистрированный пользователь равен SYSTEM из точка зрения установщиков (вы можете иметь несколько человек, вошедших в систему и запускающих приложения на машине, поэтому вам нужно думать о контексте самого процесса, а не о том, кто сидит перед физической машиной).

2 голосов
/ 21 декабря 2009

Сначала убедитесь, что бит Олицетворение установлен в положение OFF. Вот как .

К сожалению, нет способа напрямую установить этот флаг для настраиваемого действия в пользовательском интерфейсе для проекта установки в Visual Studio IDE.В Visual Studio 2005 вы можете использовать шаг после сборки, который изменяет MSI, чтобы установить этот бит, используя стратегию, ранее описанную в этом сообщении в блоге .

Во-вторых, я полагаювы работаете в Vista, потому что у людей, похоже, есть эта проблема с Vista, и кто-то задавал этот вопрос на MSDN , и его решение было следовать блогу, связанному здесь .

Блог Роберта Фламинга о UAC в MSI Notes: ошибка битов NoImpersonate также дает некоторое представление об этих проблемах.

2 голосов
/ 22 декабря 2009

Я никогда не касался проектов установки VS (хотя играл в WiX и могу порекомендовать его). Глядя на вашу проблему, кажется, что ваш ЦС работает с задержкой (и с повышенными привилегиями).

Поиск в сети проектов настройки VS Я натолкнулся на длинную статью 1 , в которой содержался этот абзац (поиск "deferred"):

Другими словами, дизайн Visual Studio ограничивает вас настраиваемыми действиями, которые вызываются, когда ваши файлы находятся в системе (отложенные настраиваемые действия), что означает, что вы должны использовать свойство CustomActionData. Другие инструменты, которые генерируют файлы MSI, часто более гибкие, поэтому, если вы ожидаете сложных настроек, изучите эти инструменты.

1: http://www.simple -talk.com / dotnet / visual-studio / visual-studio-setup --- проекты и пользовательские действия /

2 голосов
/ 21 декабря 2009

Используйте WindowsIdentity.GetCurrent (). Имя из пространства имен System.Security.Principal. Это будет включать в себя и часть домена, поэтому, если вам не нужно, добавьте разделение в конце. WindowsIdentity.GetCurrent (). Name.Split ( '') [1].

using System.Security.Principal;

this.nametext = WindowsIdentity.GetCurrent().Name.Split('')[1];
...