【问题标题】:custom action after installation failed安装失败后的自定义操作
【发布时间】:2012-07-17 08:42:24
【问题描述】:

如何排序自定义操作以仅在安装中断或错误完成时执行?

是否有任何 Windows 安装程序属性可以返回当前安装状态(失败/成功)?

【问题讨论】:

    标签: wix windows-installer installshield custom-action


    【解决方案1】:

    <Custom> 元素的OnExit 属性就是您要查找的内容。它与BeforeAfterSequence属性互斥,可以有以下值:successcancelerrorsuspend

    更新:基本上,这就是我的意思:

    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" />
    

    【讨论】:

    • 感谢 Yan 提出解决方案。但我不想返回任何特定自定义操作的代码。更具体地说,如果安装失败,无论哪个操作(或自定义操作)引发错误,我都想执行一个自定义操作,该操作从系统收集一些故障数据并通过将其发送到服务器来处理它。
    • 嗯,我仍然认为这可以通过建议的解决方案来实现......我会更新我的答案以更具体,你会看到这是否是你正在寻找的。
    • 还有一个问题,在成功安装 MSI 或发生任何错误或用户取消安装后是否有任何 Windows 安装程序属性设置,然后包含错误代码。
    • 我从来没有遇到过这样的房产
    【解决方案2】:

    在 Windows Installer 允许的范围内,这仅在计划回滚的自定义操作期间才有可能。但是回滚仅适用于延迟脚本,因此它仅适用于在 InstallInitialize 和 InstallFinalize 之间安排的操作。如果此计划窗口之外的立即模式操作导致安装中止,则回滚不适用。

    假设您正在使用 C++ 或 InstallScript 操作,您可以通过分别调用 MsiGetModeMSIRUNMODE_ROLLBACK 来了解是否启用了回滚,以及是否处于回滚状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 2011-02-11
      相关资源
      最近更新 更多