Установка PerUser с настраиваемым действием - UAC отключен

Я использую WiX для создания MSI, который устанавливает плагин для браузера для каждого пользователя. У меня есть пользовательское действие для установки драйвера с помощью DPInst (который требует повышенных привилегий).

Установка работает нормально, когда UAC включен; Windows показывает запрос на повышение. Однако, если у меня отключено UAC и я пытаюсь установить его с учетной записью обычного пользователя, dpinst.exe будет появляться до тех пор, пока компьютер не зависнет. (Около тысячи раз по последним подсчетам).

в <InstallExecuteSequence> Я имею:
<Custom Action="Install_Drivers" After="InstallFiles">NOT Installed</Custom>

Мое пользовательское действие:
<CustomAction Id='Install_Drivers' Execute='deferred' Directory='DRIVERS' ExeCommand='"[DRIVERS]DPinst.exe" /SW /SA' Return='ignore' Impersonate='no'/>

я имею Return='ignore' потому что, насколько я понимаю, dpinst.exe всегда возвращает код, отличный от 0.

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

Дополнительная информация: В настоящее время я занимаюсь разработкой для Windows 7, но нацеливаюсь на WinXP и выше.

Редактировать Взглянув на журнал для установки, это, кажется, соответствующие строки:

Executing op: CacheSizeFlush(,)
Executing op: ActionStart(Name=Install_Drivers,,)
Executing op: CustomActionSchedule(Action=Install_Drivers,ActionType=3170,Source=C:\long_redacted\Drivers\,Target="C:\long_redacted_path\Drivers\DPinst.exe" /SW /SA,)
Disallowing shutdown.  Shutdown counter: 0
CustomAction Install_Drivers returned actual error code 1073807364 but will be translated to success due to continue marking

Я полагаю, что проблема с отключением происходит после того, как я вышел из системы, чтобы остановить установку. (Отмена, кажется, не имеет никакого эффекта).

2 ответа

Решение

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

Попробуйте установить атрибут "Impersonate=no" для элемента "CustomAction", например:

<CustomAction Id='Install_Drivers' Execute='deferred' Directory='DRIVERS' ExeCommand='[DRIVERS]DPinst.exe" /SW /SA' Return='ignore' Impersonate="no"  />

Также обратите внимание: у вас есть двойная кавычка в вашей ExeCommand

Другие вопросы по тегам