2017-02-13 126 views
0

我有一个wix捆绑包,有4个MSI - 所有版本都是1.0.0,捆绑版本是1.0.0。我将它安装在Windows机器上,在ARP中,我将WiX捆绑包看作1.0.0。wix捆绑只安装更改msi

现在我仅对其中一个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。如果有事情不清楚,请告知我,并提前感谢您的帮助。

回答

1

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

含义“当设置为no(默认值)时,安装具有相同版本和升级代码(但产品代码不同)的产品可以被MSI视为两种产品,当设置为yes时,将设置msidbUpgradeAttributesVersionMaxInclusive属性,它告诉MSI将具有相同版本的产品视为主要升级。“

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

+0

另外要注意的是,如果您尚未使用该工具,则可以使用Microsoft的Orca.exe检查您的MSI。 –

+1

或instedit,即具有比较MSI功能。 –

+0

感谢评论@ArkadySitnitsky和BrianSutherland。我尝试将AllowSameVersionUpgrades设置为yes和no,但在两种情况下都安装了所有MSI。我想要的是安装程序在版本相同的情况下跳过这些模块,并且只在版本较大但未发生时才安装。 – randomuser15995183

1

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

+0

噢,好的。因此,我们每次都将软件包打包到一个新的设置中,所以我猜我们什么时候再次构建它,即使没有更改,所有模块都会再次生成,因此我们使用Product Id =“*”,所有模块都将具有不同的产品代码。围绕它的任何其他方式鲍勃? – randomuser15995183

+0

请勿使用'Product/@ Id =“*”'或不重建软件包。 –