首页 > 解决方案 > 删除文件时小升级失败

问题描述

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

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

标签: .netinstallationwixwindows-installerwix3

解决方案


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

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

如果更新满足以下任一条件,则必须更改产品代码:

  • 从现有特征中删除组件。

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

这将“刺穿”组件。就 MSI 而言,组件仍然存在并且规则没有被破坏,但组件将从机器中移除,因为它重新评估组件状况并请求将其移除。


推荐阅读