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

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

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

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

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

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

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

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

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

3 ответов


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

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

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

Как я решал это установить MSIUSEREALADMINDETECTION свойство 1, поэтому привилегированное условие действительно работает и добавляет условие запуска для льготных это дает сообщение об ошибке при запуске через командную строку с повышенными правами, а затем завершает установку.

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

Подробнее - http://www.microsoft.com/downloads/details.aspx?FamilyID=2cd92e43-6cda-478a-9e3b-4f831e899433

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


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

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


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

  • настройка вкладка -> выполнить после выполнения ввода: имя файла msi

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