我有一个wix软件包,它说4个MSI - 所有版本1.0.0和Bundle版本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>
这就是我在个人MSI的wx中所拥有的 . 我将版本更改为仅适用于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 . 如果事情不清楚,请告诉我,并提前感谢您的帮助 .
2 回答
Burn赢了't install a package if it'已安装 . 但是,如果使用
Product/@Id="*"
重建包,则会更改包标识(产品代码和包代码) . 所以Burn会安装看起来像新包装的东西 . 如果您希望Burn跳过此类包,请不要重建它 .majorUpgrade Element的一部分有AllowSameVersionUpgrades属性,默认值为no .
含义“当设置为no(默认值)时,MSI允许安装具有相同版本和升级代码(但产品代码不同)的产品,并将其视为两个产品 . 当设置为yes时,WiX设置msidbUpgradeAttributesVersionMaxInclusive属性,告诉它MSI用于处理与主要升级版本相同的产品 . “
检查此属性,看看它是否有助于解决您的问题 . 最佳做法是将版本更改为所有msis和捆绑包,这自动完成了释放产品的CI / CD管道的一部分 .