我的项目中有以下CustomAction:
<CustomAction Id="InstallDriver"
Return="check"
Execute="deferred"
Impersonate="no"
FileKey="FileDriverInst"
ExeCommand="-install" />
<InstallExecuteSequence>
<Custom Action="InstallDriver" Before="InstallServices" />
</InstallExecuteSequence>
安装驱动程序的程序会生成有用的返回码,例如,如果安装失败,因为系统需要在先前的驱动程序卸载后重新启动。
目前,如果返回成功以外的任何内容,我会收到一个对话框,说“作为设置的一部分运行的程序没有按预期完成。”并且安装失败。这不是最佳的。
如何获取和处理返回代码?
答案 0 :(得分:4)
Windows Installer不支持处理自定义操作返回值。
对于EXE自定义操作,非零返回值将被解释为错误,安装将停止。只有win32 DLL或VBScript自定义操作可以通过其return code更改安装行为,但它仍然非常有限。
如果要在安装后重新启动计算机,可以设置REBOOT属性。
答案 1 :(得分:3)
添加为&#34;答案&#34;按要求:
您的整体设计并非最佳。它已经不在Windows Installer中,并且没有声明。有更好的模式来安装驱动程序。
这就是MSI处理EXE呼叫的方式。您必须编写自己的自定义操作来包装EXE调用,然后解释失败原因。对我而言,这只会增加另一个失败点。
答案 2 :(得分:2)
您无法从CustomAction获取返回代码,但是在一个回合的方式中,您可以设置返回代码在属性上的内容。这可能与获取返回代码相同。
您必须在自定义操作执行的脚本/ dll中获取它。否则,返回代码仅显示在日志中。
例如,如果你有像
这样的属性<Property="MyCode" Secure="yes">
然后在VBScript(或Jscript)中,您可以获得该属性的值,如下所示:
<强>的VBScript 强>
Session.Property("MyCode")
最初,它为空。你可以像这样在VBScript中设置它:
If someCondition = 4 Then
Session.Property("MyCode") = "4" // For a return code of 4
End If
回到你的WiX .wxs文件后,如果查看属性的值,它现在是4.你甚至可以在CDATA标签中使用它。
例如,如果MyCode等于4,则只生成一个对话框。
<Publish Dialog="SpawnDialog" ...><![CDATA[ MyCode = 4 ]]></Publish>