Установка 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