当我从项目中删除合并模块时,不会运行WiX主要升级

时间:2010-08-03 08:38:08

标签: installer wix runtime upgrade merge-module

我有一个WiX项目,其中包括使用独立的合并模块安装x86的Visual C ++ 2008运行时组件。

不幸的是,这个.msm与MSI v4.5有一个众所周知的问题。更具体地说,.msm自定义操作 SxSUninstallCA 在卸载时需要20分钟才能完成。

所以,长话短说,我决定从新版本的产品中删除.msm,用.exe文件安装VC ++组件。

如果我只改变这个东西(当然还有ProductCode),安装程序不检测机器上已安装的产品并执行正常安装,而不先卸载旧版本。

知道这里发生了什么? MSI应检查UpgradeCode和ProductCode以检测产品是否已升级到系统上已安装的另一个产品?

3 个答案:

答案 0 :(得分:2)

检查两个安装程序中的ALLUSERS属性是否设置相同。我对合并模块遇到了同样的问题并解决了它。

答案 1 :(得分:1)

如果您希望新的MSI升级旧的MSI(并且您需要使用重大升级,因为您要删除组件),那么,是的,您需要使用UpgradeCode和Upgrade元素(或者在WiX v3.5中使用可以使用新的MajorUpgrade元素。)

如果您提供有关.wxs文件内容的更多详细信息,我可以更具体。

答案 2 :(得分:0)

该项目设置为使用UpgradeCode和ProductCode来检测升级。 例如:我使用:

构建.msi
ProductCode="05406C5C-8D66-4779-AECA-A93B18729ED5"  
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0"  
PackageCode="*"  
Version="1.1.1"  

此.msi包含要安装的文件和文件夹,以及Microsoft_VC90_CRT_x86.msm合并模块。

然后我使用以下参数构建另一个.msi

ProductCode="7F626A0C-5E69-496D-999E-8E2B14C01FE6"  
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0"  
PackageCode="*"   
Version="1.1.2"  

相同的文件,合并模块仍然包含:它工作,应用程序更新(卸载以前的版本,安装新版本)。 当我评论对Microsoft_VC90_CRT_x86.msm的每一个引用时,构建的安装程序都不会检测到以前版本的应用程序。