Проблема идентификации пользовательских действий установщика MSI
Я создаю пользовательское действие, которое выполняет сценарий в базе данных. Проблема состоит в том, что подключения использует встроенную защиту, поэтому при попытке открыть подключение я получаю сообщение об ошибке: "Ошибка входа в систему для пользователя" Domain\ComputerName$ "".
Когда я проверяю личность в настраиваемом действии (используя System.Security.Principal.WindowsIdentity.GetCurrent()
) Я всегда получаю "NT AUTHORITY\SYSTEM", но я запускаю установщик под моей учетной записью, у которой достаточно прав для базы данных.
Как я могу запустить пользовательское действие под реальным пользователем, запустив файл msi, или решить эту проблему любым другим способом?
2 ответа
Ну, есть простые решения для этого, но, возможно, это не подходит для всех случаев.
Если для свойства проекта InstallAllUsers установлено значение true, программа установки запускается с учетной записью "NT AUTHORITY\SYSTEM", но если для нее установлено значение "false", она запускается с идентификатором пользователя, который запускает программу установки.
Установка его в false работала для меня, даже если я устанавливал Службу Windows, которая работает для всех пользователей.
Короткий ответ: вам нужно
- Включите "олицетворение" для настраиваемого действия.
- (В системах Windows Vista и Windows 7) запустите всю установку в "повышенном" контексте (например, "Запуск от имени администратора").
То, как вы выполните #1, зависит от того, что вы используете для создания установочного пакета. Чтобы легко справиться с #2, я использую загрузчик (созданный с помощью Bootstrapper Manifest Generator), который настроен на запуск с повышенными правами.