【问题标题】:WiX major upgrade doesn't run when I remove a merge module from the project当我从项目中删除合并模块时,WiX 主要升级不运行
【发布时间】:2010-08-03 08:38:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: installation wix runtime upgrade merge-module


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我的评论太长,我在下面添加了它作为答案。提前感谢您的帮助。
      【解决方案3】:

      该项目已设置为使用 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 的引用时,构建的安装程序不会检测到应用程序的先前版本。

      【讨论】:

      • 编辑您的问题以添加此信息和您的升级表信息。这是另一个难题。另外,您在哪里安排了 RemoveExistingProducts 操作?
      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 2023-03-19
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多