我有一个WiX项目,其中包括使用独立的合并模块安装x86的Visual C ++ 2008运行时组件。
不幸的是,这个.msm与MSI v4.5有一个众所周知的问题。更具体地说,.msm自定义操作 SxSUninstallCA 在卸载时需要20分钟才能完成。
所以,长话短说,我决定从新版本的产品中删除.msm,用.exe文件安装VC ++组件。
如果我只改变这个东西(当然还有ProductCode),安装程序不检测机器上已安装的产品并执行正常安装,而不先卸载旧版本。
知道这里发生了什么? MSI应检查UpgradeCode和ProductCode以检测产品是否已升级到系统上已安装的另一个产品?
答案 0 :(得分:2)
检查两个安装程序中的ALLUSERS属性是否设置相同。我对合并模块遇到了同样的问题并解决了它。
答案 1 :(得分:1)
如果您希望新的MSI升级旧的MSI(并且您需要使用重大升级,因为您要删除组件),那么,是的,您需要使用UpgradeCode和Upgrade元素(或者在WiX v3.5中使用可以使用新的MajorUpgrade元素。)
如果您提供有关.wxs文件内容的更多详细信息,我可以更具体。
答案 2 :(得分:0)
该项目设置为使用UpgradeCode和ProductCode来检测升级。 例如:我使用:
构建.msiProductCode="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的每一个引用时,构建的安装程序都不会检测到以前版本的应用程序。