【问题标题】:WIX Installer. Rollback custom action for a custom action sequenced after installFinalizeWIX 安装程序。回滚自定义操作,用于在 installFinalize 之后排序的自定义操作
【发布时间】:2014-03-26 06:06:59
【问题描述】:

我的安装程序中有一些自定义操作。这些在 InstallFinalize 操作之后排序。

我需要为这些自定义操作实现回滚。

据我所知,我只能为在 InstallInitialize 和 InstallFinalize 之间排序的自定义操作实现回滚。

有什么办法吗?

【问题讨论】:

  • 只是好奇 - 在 InstallFinalize 之后需要发生什么,还需要回滚?
  • 这些自定义操作正在执行一些注册表操作。这是一个古老的书面安装程序,所以我避免更改序列。
  • 不知道你能不能做到。但听起来你有机会执行童子军规则。将其称为 InstallFinalize 是有原因的。之后不应该发生任何安装程序。也许显示一个文本框或其他东西。

标签: wix custom-action


【解决方案1】:

正如您所说,回滚仅适用于安装的事务部分,即在 InstallInitialize 和 InstallFinalize 之间。那是安装事务,在这些边界之外没有回滚。如果您在 InstallFinalize 失败后执行某些操作,则为时已晚 - 安装结束。如前所述,如果您想回滚,请不要将您的 CA 放在那里。

【讨论】:

  • 没错,更糟糕的是,InstallFinalize 之后的即时模式自定义操作可能会导致各种运行时错误。它们可能会通过 SCCM 或类似的部署系统跳过(不知道为什么 - 我已经看到了),它们可以触发重大升级回滚(CA 完成时返回错误代码,并且重大升级已经结束,现有产品的卸载失败离开注册了两个安装版本),如果他们显示 GUI 元素,他们可以在安装基本完成后停止安装,导致清理中出现奇怪的错误。我相信还有其他可能的问题。
  • 最后一点可以是永远不要在 InstallFinalize 之后对只执行只读操作的即时模式自定义操作启用错误检查。我相信这也可能引发重大升级问题,如前一条评论所述。
【解决方案2】:

在 InstallFinalize 之后更改系统顺序的任何自定义操作在定义上都是设计错误。我也会小心显示消息和检查系统的自定义操作。它们至少不应返回错误代码,否则可能会发生安装的完全回滚 - 这对于主要升级方案尤其不幸(可能会注册产品的两个版本,但只安装一个)。

InstallFinalize 之后的自定义操作总是在某些您无法预测的环境中失败 - 通常是通过部署系统(例如 SCCM (SMS) 或类似系统)部署包时。通常,InstallFinalize 之后的自定义操作会被跳过或触发整个安装的意外回滚。在没有完全管理员权限的情况下运行它们也会持续失败。

您正在执行什么样的注册表操作?它们应该易于以其他方式实现。

【讨论】:

  • 我在 Finalize 之后看到了很多 CA,不仅在本地系统上进行注册表操作,还进行其他操作。我同意,正如你所说,这是设计上的错误,我会立即尝试对它们重新排序。谢谢
  • 是的,[InstallFinalize 之后的自定义操作并不少见——即使对于昂贵的软件包也是如此。它们总是等待发生的错误——而且比你想象的要糟糕得多(除非它们只是检查条件而不是对系统进行更改)。尝试更改系统的即时模式 CA 可能会导致各种各样的事情。要么完全跳过它们,使系统未完成以供软件运行,要么在重大升级期间触发整个设置的回滚,或者 CA 完全停止设置,使其无法完成。
  • 有几个问题。换系统是什么意思。用我自己的密钥将某些内容写入注册表是否符合对系统的更改?此外,我想在这里处理一个特殊情况。也就是有人在安装完成之前取消安装。如果我可以完全回滚设置,那也解决了我的目的。这可能吗,考虑到我在 installFinalize 之后有即时 CA
  • 写入注册表肯定会改变系统。请删除所有更改系统的即时模式自定义操作 - 根据定义,它们都是错误。尚不清楚为什么甚至可以插入它们。对于我认为您要问的问题,我将添加另一个答案。
【解决方案3】:

如果您的即时模式自定义操作添加注册表数据,我会将它们全部删除并将注册表数据转换为由注册表添加。此表具有对注册表项和值的高级回滚和合并的内置支持。我想这就是你要问的。

当您拥有看起来像“在野外”的产品时,我建议您在 InstallExecuteSequence 的早期使用 RemoveExistingProducts 运行主要升级,然后在所有即时模式“更改操作”消失的情况下安装新版本。这应该会提供一个平滑的升级方案,但会使修补变得困难。

【讨论】:

    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多