【问题标题】:wix bundle only install changed msiwix bundle 仅安装更改的 msi
【发布时间】:2017-02-13 13:47:27
【问题描述】:

我有一个 wix 捆绑包,其中包含 4 个 MSI - 全部版本为 1.0.0,捆绑包版本为 1.0.0。我将它安装在 Windows 机器上,在 ARP 中我看到 WiX 包为 1.0.0。

现在我只对其中一个 MSI(比如 B)进行了一些更改,并将 Bundle 版本更改为 1.1.0,并将更改后的 MSI (B) 版本更改为 1.1.0。其余 MSI(A、C、D)仍为 1.0.0。

现在,当我再次运行捆绑包时,我希望 A、C 和 D 的安装将被跳过,并且只会升级 B,并且捆绑包也将在 ARP 中使用 1.1.0 版本进行更新。但我观察到的是所有软件包(A、B、C、D)的安装,而不仅仅是 B。

那么是我的期望错了还是我做错了什么?

这就是我的捆绑代码中的内容

<Chain>

 <MsiPackage Id=“A"

              Cache="no” 

      Vital=“yes"

              EnableFeatureSelection="no"

              Permanent="no" Visible="no"

              ForcePerMachine=“yes” 

             SourceFile = “<>”/>

   <MsiPackage Id=“B"

              Cache="no” 

      Vital=“yes"

              EnableFeatureSelection="no"

              Permanent="no" Visible="no"

              ForcePerMachine=“yes” 

             SourceFile = “<>”/>

</Chain>

这就是我在 wxs 中为各个 MSI 准备的内容。我仅将 MSI B 的版本更改为 1.1.0 并保持 UpgradeCode 相同。

<Product Id="*" UpgradeCode="<GUID which is same across installations>"
         Version="1.0.0" />
<MajorUpgrade DowngradeErrorMessage="New version is present."

我查了很多线程,但通常他们都在谈论升级所有 MSI,而不是 1 个 MSI。如果有什么不清楚的地方请告诉我,并提前感谢您的帮助。

【问题讨论】:

    标签: wix installation upgrade major-upgrade


    【解决方案1】:

    Burn 不会安装已经安装的包。但是,如果您使用Product/@Id="*" 重新构建包,则包标识会更改(产品代码和包代码)。所以 Burn 安装了一个看起来像新包的东西。如果您希望 Burn 跳过这样的包,请不要重新构建它。

    【讨论】:

    • 哦,好的。所以我们每次都在一个新的设置中打包捆绑包,所以我猜当我们再次构建它时,即使没有任何更改,所有模块都会再次构建,所以所有模块都会有不同的产品代码,因为我们使用 Product Id="*"。 Bob 有什么其他方法吗?
    • 不要使用Product/@Id="*" 或者不要重建包。
    【解决方案2】:

    majorUpgrade 元素的一部分有一个AllowSameVersionUpgrades 属性,默认值为no。

    含义“当设置为 no(默认值)时,允许安装具有相同版本和升级代码(但产品代码不同)的产品,MSI 将其视为两个产品。当设置为 yes 时,WiX 设置 msidbUpgradeAttributesVersionMaxInclusive 属性,它告诉 MSI 将具有相同版本的产品视为重大升级。”

    检查此属性,看看它是否有助于解决您的问题。 最佳做法是将版本更改为所有 msis 和捆绑包,这是在发布产品的 CI/CD 管道中自动完成的。

    【讨论】:

    • 另外请注意,如果您尚未使用 Microsoft 的 Orca.exe,您可以使用该工具检查您的 MSI。
    • 感谢 cmets @ArkadySitnitsky 和 ​​BrianSutherland。我尝试将 AllowSameVersionUpgrades 设置为是和否,但在这两种情况下它都会安装所有 MSI。我想要的是安装程序在版本相同时跳过模块,并且仅在版本更高但没有发生的情况下安装。
    猜你喜欢
    • 2022-01-20
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    相关资源
    最近更新 更多