【发布时间】:2012-03-05 22:27:47
【问题描述】:
我一直在努力构建一个新的 WiX 安装程序,我对此非常满意,除了我还需要安装设备驱动程序。
理想情况下,我希望能够通过使用RegistrySearch 来检测此驱动程序的存在,例如
<Property Id="DRIVERINSTALLED">
<RegistrySearch Id="DriverInstalledSearch" Root="HKLM" Key="SOFTWARE\DriverCompany\Settings" Name="InstallPath" Type="raw" />
</Property>
如果 InstallPath 注册表项有值,那么我想继续安装设备驱动程序。我还没有弄清楚那部分,但现在这是次要的,因为我什至无法每次都安装设备驱动程序。
网络上有各种各样的例子,对应于 WiX v3.5 的例子似乎遵循这种模式:
<CustomAction Id="InstallDeviceDrivers" Execute="deferred" Directory="INSTALLLOCATION" ExeCommand="setup.exe" Return="check" />
.
.
.
<InstallExecuteSequence>
<Custom Action="InstallDeviceDrivers" After="InstallFiles" />
</InstallExecuteSequence>
每当我运行我的 msi 时,我都会收到错误消息“无法运行完成此安装所需的程序”。
setup.exe 被复制到我的 INSTALLLOCATION,当我的 msi 失败时,我通过查看该文件夹来验证这一点。
我使用了After 属性的值,但InstallFiles 似乎是正确的,因为它维护了提升的用户权限。我最初尝试过InstallFinalize,但失败了,我认为它没有以提升的权限运行。问题是,我尝试过的其他操作都不起作用。
然后我使用msiexec /i installer.msi /l*v install.log 运行我的安装程序并查看输出文件。这就是我看到一个更具体的错误的地方:
MSI (s) (74:CC) [14:06:10:098]: Executing op: ActionStart(Name=InstallDeviceDrivers,,)
Action 14:06:10: InstallDeviceDrivers.
MSI (s) (74:CC) [14:06:10:098]: Executing op: CustomActionSchedule(Action=InstallDeviceDrivers,ActionType=1058,Source=C:\Program Files\MyCompany\MyProduct\,Target=setup.exe,)
MSI (s) (74:CC) [14:06:10:108]: Note: 1: 1721 2: InstallDeviceDrivers 3: C:\Program Files\MyCompany\MyProduct\ 4: setup.exe
MSI (s) (74:CC) [14:06:10:108]: Note: 1: 2205 2: 3: Error
MSI (s) (74:CC) [14:06:10:108]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1721
Error 1721. There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. Action: InstallDeviceDrivers, location: C:\Program Files\MyCompany\MyProduct\, command: setup.exe
MSI (s) (74:CC) [14:06:11:800]: Note: 1: 2205 2: 3: Error
MSI (s) (74:CC) [14:06:11:800]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1709
MSI (s) (74:CC) [14:06:11:800]: Product: Installer -- Error 1721. There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. Action: InstallDeviceDrivers, location: C:\Program Files\MyCompany\MyProduct\, command: setup.exe
根据一些搜索,听起来我只需要以管理员身份运行,但我的安装程序已经触发 UAC...果然,从提升的命令提示符运行安装程序没有帮助。
谁能推荐我下一步的操作来调试它?如果您还有关于如何根据注册表项的存在有条件地安装的信息,那也很棒。谢谢!
编辑——我已经在 Windows XP 32 位和 Windows 7 32 位上运行了我的安装程序,但在两者上都失败了。另一个相信它与权限无关的理由。
EDIT #2 -- 我不知道为什么我之前没有尝试过,但是我从 setup.exe 更改为 notepad.exe,然后记事本启动了。所以显然 CustomAction 有效。我将再次尝试使用 Process Monitor 来查看它在哪里寻找 setup.exe... 或者我只是无法从另一个安装程序中运行安装程序?
【问题讨论】:
标签: wix windows-installer wix3.5 custom-action