Отметьте MSI, чтобы он запускался от имени учетной записи администратора с повышенными правами

StackOverflow https://stackoverflow.com/questions/304353

Вопрос

У меня есть CustomAction как часть MSI.

Он ДОЛЖЕН запускаться от имени учетной записи домена, которая также является членом учетной записи локальных администраторов.

Он не может использовать флаг NoImpersonate для запуска пользовательского действия от имени NT Authority \ System, поскольку тогда он не получит доступа к сетевым ресурсам.

В Vista / 2008 с включенным UAC, если параметр NoImpersonate выключен, то он будет запускаться как выполняющий пользователь, но с непривилегированный токен и не получать доступ к локальным ресурсам, таким как .InstallState . Смотрите Архитектуру UAC

Кто-нибудь знает способ либо

  • Заставить MSI запускаться с токеном с повышенными правами таким же образом, как при запуске из командной строки с повышенными правами?

  • Принудительно запустить CustomAction с повышенными правами (requireAdministrator в манифесте, похоже, не работает)?

  • Выясните, включен ли UAC и не был ли он запущен с повышенными правами, и если да, предупредите или отмените установку?

Это было полезно?

Решение

Отвечая на мой собственный вопрос для любого другого бедного s0d, смотрящего на это.

  • Вы не можете добавить манифест в MSI.Вы могли бы добавить SETUP.EXE или bootstrapper для оболочки MSI и манифестировать это с помощью requireAdministrator, но это сводит на нет часть смысла использования MSI.

  • Добавление манифеста к CustomAction не работает, поскольку оно выполняется из msiexec.exe

Способ, которым я справился с этим, заключается в том, чтобы установить ОБНАРУЖЕНИЕ MSIUSEREALADMIND свойству 1, чтобы привилегированное условие действительно работало, и добавьте условие запуска для Привилегированный это выдает сообщение об ошибке о запуске через командную строку с повышенными правами, а затем завершает установку.

Это имеет приятный побочный эффект - когда msi запускается из командной строки с повышенными правами, отложенные пользовательские действия выполняются от имени текущего пользователя с полным токеном администратора (а не стандартным пользовательским токеном) независимо от Безличный настройка.

Более подробная информация - http://www.microsoft.com/downloads/details.aspx ?Идентификатор семейства=2cd92e43-6cda-478a-9e3b-4f831e899433

[Редактировать] - Я поместил сюда скрипт, который позволяет добавить свойство MSIUSEREALADMINDETECTION поскольку VS не имеет возможности сделать это, а Orca - это заноза.

Другие советы

requireAdministrator в манифесте должен работать.

Вы также можете использовать загрузчик .exe-файл, который может использовать ShellExecute с "RUNAS" в качестве глагола (вы можете использовать 7-zip для создания загрузчика, или есть много других способов).

Вы можете создать простой архивный файл sfx для msi файл с помощью Winrar и эти параметры:

  • Вкладка Настройки > Запуск после выполнения ввода:имя вашего msi-файла

  • Вкладка Дополнительно> Отметить Запросить административный доступ флажок опции

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top