Проблема идентификации пользовательских действий установщика MSI

Я создаю пользовательское действие, которое выполняет сценарий в базе данных. Проблема состоит в том, что подключения использует встроенную защиту, поэтому при попытке открыть подключение я получаю сообщение об ошибке: "Ошибка входа в систему для пользователя" Domain\ComputerName$ "".

Когда я проверяю личность в настраиваемом действии (используя System.Security.Principal.WindowsIdentity.GetCurrent()) Я всегда получаю "NT AUTHORITY\SYSTEM", но я запускаю установщик под моей учетной записью, у которой достаточно прав для базы данных.

Как я могу запустить пользовательское действие под реальным пользователем, запустив файл msi, или решить эту проблему любым другим способом?

2 ответа

Решение

Ну, есть простые решения для этого, но, возможно, это не подходит для всех случаев.

Если для свойства проекта InstallAllUsers установлено значение true, программа установки запускается с учетной записью "NT AUTHORITY\SYSTEM", но если для нее установлено значение "false", она запускается с идентификатором пользователя, который запускает программу установки.

Установка его в false работала для меня, даже если я устанавливал Службу Windows, которая работает для всех пользователей.

Короткий ответ: вам нужно

  1. Включите "олицетворение" для настраиваемого действия.
  2. (В системах Windows Vista и Windows 7) запустите всю установку в "повышенном" контексте (например, "Запуск от имени администратора").

То, как вы выполните #1, зависит от того, что вы используете для создания установочного пакета. Чтобы легко справиться с #2, я использую загрузчик (созданный с помощью Bootstrapper Manifest Generator), который настроен на запуск с повышенными правами.

Другие вопросы по тегам