2017-02-13 187 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 =「*」'或不重建軟件包。 –