Как получить текущее имя пользователя в пользовательском действии для установщика Windows?

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

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

Подробнее о конкретном случае:

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

Ответ 1

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

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

Ответ 2

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

Environment.GetEnvironmentVariable( "ИМЯ_ПОЛЬЗОВАТЕЛЯ" );

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

Ответ 3

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

using System.Security.Principal;

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

Ответ 4

Во-первых, убедитесь, что Impersonate bit установлен в положение OFF. Вот как.

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

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

Роберт Пылающий пост в блоге на UAC в заметках MSI: ошибка в NoImpersonate Bit Mistake также дает некоторое представление об этих проблемах.

Ответ 5

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

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

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

1: http://www.simple-talk.com/dotnet/visual-studio/visual-studio-setup---projects-and-custom-actions/