0

我正在使用 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

我相信,关于关机的一点是,当我注销时停止安装。(取消似乎没有任何效果)。

4

2 回答 2

1

尝试在“CustomAction”元素上设置“Impersonate=no”属性,如下所示:

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

另请注意:您的 ExeCommand 中有一个杂散的双引号

于 2013-07-13T00:30:01.457 回答
0

安装驱动程序本质上是每台机器的操作。受限用户无法做到这一点。因此,在禁用 UAC 的情况下,它将无法正常工作。DPInst 显然没有得到它没有权限并且无法获得权限的提示。听起来像是 DPInst 中的一个错误。您应该将安装程序更改为每台计算机,并在 Privileged 属性上添加启动条件,以防止安装程序无法为没有 UAC 的受限用户启动。

于 2013-07-13T15:56:40.740 回答