2015-10-16 191 views
1

我有一個應用程序,它可以安裝在兩種形式交付:安裝,升級與MSI導致多個版本安裝

  1. MSI軟件包;和
  2. 包含軟件包以及一些鏈接先決條件的WiX軟件包。

大多數用戶會選擇安裝捆綁軟件,但我想保留手動安裝必備軟件和MSI軟件包的可能性。

我的自動更新過程涉及下載新的MSI軟件包並進行重大升級。只要應用程序最初使用MSI軟件包進行安裝,此功能就可以正常工作。但是,如果應用程序是從軟件包安裝的,我最終會並排安裝兩個版本。

如何確保使用下載的MSI進行升級可以正確替換或刪除原始包?


Bundle.wxs:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Bundle Name="The Product" Version="!(bind.packageVersion.TheProduct.Msi)" Manufacturer="TheCompany" UpgradeCode="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"> 
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"> 
     <bal:WixStandardBootstrapperApplication 
      LicenseFile="Resources\license.rtf" 
      LogoFile="Resources\logo.png" /> 
    </BootstrapperApplicationRef> 

    <Chain> 
     <PackageGroupRef Id="NetFx451Web" /> 
     <MsiPackage Id="TheProduct.Msi" SourceFile="$(var.TheProduct.Msi.TargetPath)" Vital="yes" Compressed="yes" /> 
    </Chain> 
    </Bundle> 
</Wix> 

Product.wxs(的MSI):

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" Name="TheProduct" Language="1033" Version="!(bind.fileVersion.TheProduct.dll)" Manufacturer="TheCompany" UpgradeCode="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" /> 

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
    <MediaTemplate EmbedCab="yes" /> 
    <UIRef Id="WixUI_Minimal" /> 
    </Product> 
    <!-- ... snip ... --> 
</Wix> 

回答

1

.msi軟件包不能升級束;只有另一束可以做到這一點。但.msi軟件包可以升級最初由軟件包安裝的.msi軟件包。您在ARP中獲得兩個條目,而不是並排安裝兩個包。 @ Ravi的回答是正確的:使用ARPSYSTEMCOMPONENT確保.msi包不可見,以匹配捆綁包的安裝方式。