我有一个wix捆绑包,它有4个MSI-所有版本都是1.0.0,捆绑包版本是1.0.0。我把它安装在一台windows机器上,在ARP中,我看到WiX捆绑包是1.0.0。
现在,我只对其中一个MSIs(比如B)进行了一些更改,并将Bundle版本更改为1.1.0,将更改后的MSI(B)版本更改为1.10。其余的MSIs(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中为各个MSIs所做的。我只为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。如果有什么不清楚的地方请告诉我,并提前感谢您的帮助。
Burn不会安装已经安装的程序包。但是,如果使用Product/@Id="*"
重建包,则包标识(产品代码和包代码)会发生更改。所以Burn安装了一个看起来像新软件包的东西。如果你想让Burn跳过这样一个包,不要重建它。
majorUpgrade元素的一部分有一个AllowSameVersionUpgrades属性,默认值为no。
意思是"当设置为no(默认值)时,MSI允许安装具有相同版本和升级代码(但不同的产品代码)的产品,并将其视为两种产品。当设置为yes时,WiX设置msidbUpgradeAttributesVersionMaxInclusive属性,该属性告诉MSI将具有相同版本的产品视为主要升级。">
检查此属性,看看它是否有助于解决您的问题。最佳做法是将版本更改为所有msi和捆绑包,这是发布产品的CI/CD管道的一部分自动完成的。