Подтвердить что ты не робот

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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