【问题标题】:Prevent Custom Actions on Patch Uninstall防止补丁卸载时的自定义操作
【发布时间】:2014-04-15 11:27:59
【问题描述】:

我有一个 product.msi 有一些自定义操作,它已经发布了。

patch.msp 是我为 product.msi 制作的补丁。

当我从控制面板中删除此补丁 => 添加/删除程序时,旧包中的自定义操作始终运行。这不是我的期望。

我不想在卸载补丁时运行自定义操作。

我也用谷歌搜索过,但没有很好的方法来发布产品,我无法更改 wxs 文件以添加自定义操作的条件。

有人可以帮助我吗? 非常感谢您的帮助!

【问题讨论】:

标签: wix installation patch


【解决方案1】:

补丁具有补丁特有的属性,例如PATCHMSIPATCHREMOVE。对自定义操作使用这些条件,根据需要使它们在补丁期间运行或不运行。

注意自定义操作的条件,它们很难正确处理。这里有一个 "MSI Conditions Cheat Sheet" 可以帮助您。我没有测试过这些条件 - 测试是唯一的保证。

我提出了一些进一步的修补建议,因为这很难处理。请务必阅读以节省您的麻烦。讨厌用这种有问题的技术让人们走上歧途:

  • 如果产品的卸载顺序中出现错误,您的修复需要创建一个非常精心设计的次要升级,您可以将其作为补丁提供。这是补丁的最佳用途之一。
  • 次要升级不会卸载现有安装,但评估者重新缓存新的 MSI 文件以用于维护和卸载操作。因此,您可以在运行前修复卸载。
  • 创建次要升级,将其作为常规升级安装进行全面测试,然后将其打包为补丁。补丁只是有效升级的分发/交付机制。
  • 在验证升级之前不要浪费时间制作补丁。这是一个浪费大量时间的常见错误。事实上,如果次要升级有效,则可能根本不需要补丁。只需使用次要升级,除非您的 MSI 文件非常大并且您想提供一个小的“修补程序”。
  • 如果您需要在补丁中包含文件,我建议启用“包含整个文件”。否则会进行位级修补,这是不必要的复杂性(除非您的二进制文件非常庞大)。
  • 仅在补丁中包含您需要的内容。不添加不需要的文件或设置,您可以制作可靠的补丁。尽可能避免添加自定义操作。
  • 请注意,修补程序使用与常规安装相同的 InstallExecuteSequence,但您可以使用特定于修补程序的属性(例如 PATCHMSIPATCHREMOVE)以不同的方式设置自定义操作。根据需要对自定义操作使用这些条件,使它们在补丁期间运行或不运行。

这种“修复卸载方法”是我发现可以成功使用 MSI 补丁的极少数场景之一。否则打补丁非常复杂且容易出错。对于大型产品的小型“修补程序”也很有效——这显然是整个技术的设计目的。

查看 Stefan Kruger 的 installsite.org 了解更多升级和修补提示。

查看this well known wix tutorial 以获取升级和补丁。还有MSDN

【讨论】:

  • 看来这不是我想要的。
  • 我设法回答了另一个公告板上的一个不同但相似的问题! :-)。我已经更新了答案,看看现在是否至少有一部分有意义。
猜你喜欢
  • 2013-02-14
  • 2011-03-02
  • 2011-08-10
  • 1970-01-01
  • 2018-04-12
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
相关资源
最近更新 更多