【发布时间】:2012-07-17 08:42:24
【问题描述】:
如何排序自定义操作以仅在安装中断或错误完成时执行?
是否有任何 Windows 安装程序属性可以返回当前安装状态(失败/成功)?
【问题讨论】:
标签: wix windows-installer installshield custom-action
如何排序自定义操作以仅在安装中断或错误完成时执行?
是否有任何 Windows 安装程序属性可以返回当前安装状态(失败/成功)?
【问题讨论】:
标签: wix windows-installer installshield custom-action
<Custom> 元素的OnExit 属性就是您要查找的内容。它与Before、After和Sequence属性互斥,可以有以下值:success、cancel、error、suspend。
更新:基本上,这就是我的意思:
1) 定义一个自定义操作,它将完成您希望它完成的工作(收集一些失败数据)。请注意,您必须定义 N 个指向同一目标的自定义操作,因为 CustomAction MSI table 需要 Id 作为主键(假设它是 DLL CA):
<CustomAction Id="LogFailureOnCancel" BinaryKey="CustomActions" DllEntry="LogFailure" ... />
<CustomAction Id="LogFailureOnError" BinaryKey="CustomActions" DllEntry="LogFailure" ... />
注意:两个定义都指向同一个真实动作(DllEntry 属性)。
2) 适当安排这些自定义操作:
<Custom Action="LogFailureOnCancel" OnExit="cancel" />
<Custom Action="LogFailureOnError" OnExit="error" />
【讨论】:
在 Windows Installer 允许的范围内,这仅在计划回滚的自定义操作期间才有可能。但是回滚仅适用于延迟脚本,因此它仅适用于在 InstallInitialize 和 InstallFinalize 之间安排的操作。如果此计划窗口之外的立即模式操作导致安装中止,则回滚不适用。
假设您正在使用 C++ 或 InstallScript 操作,您可以通过分别调用 MsiGetMode 或 MSIRUNMODE_ROLLBACK 来了解是否启用了回滚,以及是否处于回滚状态。
【讨论】: