2013-07-12 2 views
0

Я использую WiX для создания MSI, который устанавливает плагин браузера на основе perUser. У меня есть специальное действие для установки драйвера с использованием DPInst (для которого требуются повышенные привилегии).PerUser install with Custom Action - UAC отключен

Установка работает нормально, когда 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 всегда returns a non-0 code.

Как я могу гарантировать правильное выполнение пользовательского действия при отключении 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 

бит о завершении работы, я считаю, когда я вышел из системы остановки установки. (Отмена не оказывает никакого влияния).

ответ

0

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

+0

Спасибо. Я понимаю, что установка драйвера - это работа на машине. Тем не менее, я намерен использовать плагин браузера для установки в профиле пользователей. Похоже, [этот человек] (http://stackoverflow.com/questions/10783164/dpinst-exe-behaviour-in-windows-7-with-standard-user-privilege) имел такой же опыт работы с dpinst. Это похоже на довольно плохую ошибку, если это так. – Elliott

+0

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

+0

Боб, спасибо. Это то, что я закончил делать. – Elliott

1

Пробуйте установку «Impersonate = нет» атрибута элемента «CustomAction», как это:

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

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

+0

Спасибо, недостающая цитата была ошибкой копирования. К сожалению, добавление Impersonate = "no" не решило проблему. (Хотя до того, как я вышел из системы, он достиг только 200 процессов dpinst.exe!). Я редактировал вопрос, чтобы включить ваше предложение. Я неправильно подумал, что значение «нет» было значением по умолчанию. – Elliott