WIX安装程序。回滚在installFinalize之后排序的自定义操作的自定义操作

时间:2014-03-22 21:29:51

标签: wix custom-action

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

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

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

我能以任何方式做到吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

如果你有一个“野外”的产品,我建议你在InstallExecuteSequence的早期使用RemoveExistingProducts运行主要升级,然后安装新版本,所有立即模式“更改操作”都没有了。这应该提供平滑的升级方案,但是使修补变得困难。