Как автоматизировать тестирование MSI, устанавливаемого с помощью UAC? - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу убедиться, что MSI устанавливается обычными пользователями.Есть ли способ эмулировать поток разрешений установки с использованием UAC без графических подсказок?

Справочная информация:

Я работаю с приложением, распространяемым в Windows через MSI.Мы проводим автоматическое тестирование, запустив msiexec, а затем тестируем полученное приложение.Это работает, но недавно мы столкнулись с крайним случаем, который он не охватывает.

Недавно мы добавили CustomAction в нашу настройку wix, которая запускается в конце установки и требует повышенных разрешений для запуска.,Проблема в том, что CustomAction s, по умолчанию, запускаются с Impersonate="yes", что означает, что они работают с разрешениями запущенного пользователя, а не с повышенными разрешениями, предоставленными UAC.

В нашем тестировании мы запускаем изконтекст администратора, поэтому установка прошла успешно.Однако обычным пользователям потребуется приглашение UAC для предоставления временных прав администратора MSI для установки.Поскольку пользовательское действие не выполняется с этим контекстом администратора, установка завершается неудачно.

Поэтому я хочу настроить автоматизированную среду тестирования, которая более близко имитирует взаимодействие с пользователем.UAC, как правило, не предназначен для сценариев по соображениям безопасности, что усложняет проблему.Так что мне интересно, есть ли способ реализовать поток разрешений таким образом, чтобы он был автоматизирован, учитывая, что я имею полный контроль над средой.

1 Ответ

0 голосов
/ 21 февраля 2019

Повышенные права : установка для каждого компьютера может выполняться с временными правами администратора - как вы сказали - без установки для каждого пользователя.Это делается с помощью групповой политики / Active Directory и систем распространения, которые правильно обрабатывают сценарии такого типа.

Эмуляция повышенных прав : для эмуляции повышенных прав на обычномПК (без системы распространения), вы можете использовать групповую политику / взлом реестра, называемый AlwaysInstallElevated .После применения это означает, что все пользователи могут работать с повышенными правами, просто запустив MSI.Значительная дыра в безопасности, так что не используйте ее для развлечения.Однако вы можете отменить любую установку и установить с повышенными правами - если это то, что вам нужно.

Настраиваемое действие в отложенном режиме : Только настраиваемые действия в отложенном режимеимеют повышенные права.Настраиваемые действия в непосредственном режиме нельзя повысить, и если они попытаются что-то сделать с системой, требующей прав администратора, вы получите ошибку во время выполнения.Если вы запустите такой сбойный MSI с «настоящими» правами администратора, то вы увидите, что MSI выглядит успешно установленным (хотя он не сможет работать с повышенными правами для обычного пользователя).

Реализация пользовательского действия в режиме отложенного режимакак правило (для нетривиальных целей) требуются некоторые шаги.Возможно, вы знакомы с ними?Вы не можете получить доступ к свойствам напрямую, вам нужно «отправить их в отложенный режим» через механизм, называемый CustomActionData ( SO ).И добавление маргинального образца WiX для отложенного режима .

Пока что я вам даю ссылки (слишком много, но я просто подумал, что передам вам кучу - думаю, первая ссылка подойдет, 5 для классической технической статьи, 6 для современного подхода с использованием JSON):


Привилегированный : Если вы хотите, чтобы пакет MSI правильно устанавливался для каждой машины для обычного пользователя, я бы добавил условие запуска MSI для отмены, если привилегированные права недоступны (нет шансов на успех).Обратите внимание, что это проверяет не права администратора, а привилегированные права (повышенные права).

<Condition Message="Elevated rights required to install package.">Privileged</Condition>

msiexec.exe : И только для записи,добавление небольшого пакета для проверки кодов ошибок msiexec.exe (не тестировалось недавно, но здесь - обратите внимание, что число или коды ошибок указывают на успех - например, " rebootинициировано"и тому подобное):

1603 = Fatal error.См. Ссылку выше для получения дополнительной информации.

start /wait msiexec.exe /i Setup.msi /l*v Setup.log

if "%errorlevel%" == "0" goto OK
if "%errorlevel%" == "1603" goto err
if not "%errorlevel%" == "0" goto err

:OK
GOTO END

:err
rem print message and return errorlevel
echo "Error: Msiexec failed with errorlevel = %errorlevel%"
exit /b %errorlevel%

:END

Обратите внимание, что несколько кодов выхода указывают на успех (кроме 0):

1641: ERROR_SUCCESS_REBOOT_INITIATED
3010: ERROR_SUCCESS_REBOOT_REQUIRED

Возможно, есть и другие, которые я забыл.Только образец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...