2

一般信息:

我们使用 WIX 3.10.3 来构建我们的 Base Msi 和 Patch Msp。

支持 Windows 安装程序版本 301

补丁是使用文档中的 Purely Wix 方法构建的。

问题的根本原因:

Base Msi 包含一个名为“Sample.dll”的文件,版本为 1.0.0.0,语言为“中性”。在构建补丁时,WIX 认为 Sample.dll 的内容发生了变化,但版本保留为“1.0.0.0”,语言为“中性”。

Sample.dll 用于创建补丁,尽管内容没有变化,但与用于创建的基本 dll 和 msp dll 相比,我们能够识别出二进制变化。请参阅Beyond Compare的以下屏幕截图

Beyond Compare MSI 和 MSP 包含的 DLL 快照

在安装 Base 和补丁期间,根据 Windows Installer 文件版本控制规则 ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa368599(v=vs.85).aspx ),文件“Sample.dll”没有通过补丁重新安装,因为版本和语言相同。因此,在删除补丁时,Windows 安装程序会请求 msi 的来源。这导致我们的客户卸载失败,因为在卸载期间无法使用 msi 的源。

这是一个博客条目,它说这个问题在 Windows 安装程序版本 301 ( https://blogs.msdn.microsoft.com/heaths/2007/06/28/unchanged-files-break-patch-uninstall) 中被识别。

我们已经尝试在 WIX 中将安装程序版本支持更新为 405,但问题仍然存在。

在这里,补丁创建考虑了基本 msi 和补丁 msi 之间的二进制更改以创建 Msp,而 Windows 安装程序在安装时考虑了文件版本控制规则。

是否有一些更改可以帮助避免此类情况以及如何确保仅考虑真正更改的文件来创建和安装补丁?

4

0 回答 0