一般信息:
我们使用WIX 3.10.3构建我们的Base Msi和Patch Msp。
支持Windows Installer版本301
补丁是使用Purely Wix方法构建的,如文档所述。
问题的根本原因:
Base Msi包含一个名为" Sample.dll"的文件。版本为1.0.0.0,语言为"中性"。 在构建补丁时,WIX认为Sample.dll的内容发生了变化,但版本保留为" 1.0.0.0"和语言为"中立"。
Sample.dll用于补丁创建,即使内容没有变化,但是我们能够识别出与基础和用于创建的msp dll相比有二进制更改。请参阅Beyond Compare
下面的截图Beyond Compare Snapshot of the DLL's included for MSI and MSP
在安装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安装程序在安装时考虑文件版本控制规则。
是否有一些更改可以帮助避免此类情况以及如何确保仅考虑真正更改的文件以进行修补程序的创建和安装?