1

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

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

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

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

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

4

3 回答 3

2

检查您在两个安装程序中是否将 ALLUSERS 属性设置为相同。我在合并模块方面遇到了同样的问题,并且解决了它。

于 2011-11-28T14:16:46.847 回答
1

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

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

于 2010-08-03T13:18:46.303 回答
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 的引用时,构建的安装程序不会检测到应用程序的先前版本。

于 2010-08-03T14:47:48.503 回答