Отметьте MSI, чтобы он запускался как повышенная учетная запись администратора - PullRequest
24 голосов
/ 20 ноября 2008

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

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

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

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

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

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

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

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

Ответы [ 3 ]

33 голосов
/ 23 ноября 2008

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

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

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

Я решил эту проблему, установив для свойства MSIUSEREALADMINDETECTION значение 1, чтобы условие Privileged фактически работало, и добавило условие запуска для Privileged , которое выдает сообщение об ошибке при запуске через командная строка с повышенными правами и затем завершает установку.

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

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

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

1 голос
/ 20 ноября 2008

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

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

0 голосов
/ 15 апреля 2018

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

  • Вкладка «Настройка»> Запуск после ввода ввода : имя файла MSI

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

...