小升级在删除文件时失败

问题描述

带有 WIX 安装程序的桌面应用程序。应用程序的 A 版包含以下文件:a.dll、b.dll、c.dll。 版本 B 包含文件:b.dll、c.dll、d.dll。 执行从 A 版本到 B 版本的小升级后,没有文件被替换。我认为问题出在 A 版本中存在的 .dll 文件中,而 B 中不存在。

我们不能在小升级期间删除文件吗? 当a.dll附加到B版本时,升级成功。

解决方法

这违反了组件规则。只有主要升级才能移除组件。

https://docs.microsoft.com/en-us/windows/win32/msi/changing-the-product-code

如果更新符合以下任一情况,则必须更改产品代码:

  • 从现有功能中删除了一个组件。

也就是说,有一个解决方法。将组件设为 Transitive = True 并为组件提供一个始终评估为 false 的条件。您仍必须在 MSI 中包含该文件,但如果您愿意,它可以是零字节文件。

这将“刺穿”组件。就 MSI 而言,该组件仍然存在且规则并未违反,但该组件将从机器中移除,因为它会重新评估组件状况并要求将其移除。