我有一个非常简单的 WiX 项目(版本 3.7),它安装一些文件(.NET 程序版本 6.0.0.0)。我准备使用 WiX 中的 MajorUpgrade 功能发布新版本 6.0.1.0。
我在 Product 元素中保持 UpgradeCode 相同,并将版本从 6.0.0.0 更改为 6.0.1.0
<Product Id="*" Name="MyApp" Version="6.0.1.0" Manufacturer="Me"
UpgradeCode="$(var.TheUpgradeCodeGUID)">
在安装了 6.0.0.0 的计算机上,我运行新的安装程序。
旧版本6.0.0.0的删除运行正常(所有已安装的文件都被删除),但是当安装程序继续安装新版本时,缺少2个文件:一个第3方DLL和一个第3方EXE(尚未删除)已更改)不会重新安装。
<Component Id="AutomaticUpdaterWPF.dll" Guid="*">
<File Id="AutomaticUpdaterWPF.dll" Source="AutomaticUpdaterWPF.dll" KeyPath="yes" Checksum="yes" />
</Component>
<Component Id="wyUpdaterProgram" Guid="*">
<File Id="wyUpdaterProgram" Source="wyUpdate.exe" KeyPath="yes" Checksum="yes" />
</Component>
在主要升级期间, 中的所有其他文件(一些已修改,一些未修改,包括其他第 3 方 DLL)均已正确安装。
如果我在重大升级后单击“修复”,则 2 个丢失的文件会重新出现。
另外,如果我第一次安装版本6.0.1.0(没有升级,而是首先在干净的机器上安装),那么这2个文件会直接正常安装。
(在多台 Windows 机器(XP、7 和 8)上测试)
有人建议什么是错的以及如何解决它吗?
提供的日志文件显示计算机上已存在一些文件的较新版本:
MSI (s) (0C:5C) [16:13:25:890]: Disallowing installation of component: {015A4DC1-56F4-562B-96B5-B3BE0D45FA5F} since the same component with higher versioned keyfile exists
MSI (s) (0C:5C) [16:13:25:890]: Disallowing installation of component: {4B6A1404-3892-5BEF-AB47-8FE3149211A4} since the same component with higher versioned keyfile exists
我过去曾见过此更新程序的此问题。克里斯托弗是对的。更新程序更新了其文件,但没有告诉 MSI(它不更新 MSI,这不是正确的做法)。新的 MSI 认为机器上有更新的东西,选择不安装其文件,但在升级过程中旧包删除了文件(它没有注意到版本更新)。由于新的安装程序选择不安装这些文件,因此您最终什么也没有......直到修复为止。
要解决此问题,您需要稍后移动“RemoveExistingProducts”操作。如果您使用 MajorUpgrade 元素,那么Schedule='afterInstallExecute'
or Schedule='afterInstallFinalize'
应该可以解决问题。你需要更加小心组件规则 http://robmensching.com/blog/posts/2003/10/18/component-rules-101.
另外,恕我直言,第 3 方供应商不应更新 MSI 之外的文件。他们的决定正在迫使你的产品进入一种特定的升级方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)