2015-10-16 137 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包不可见,以匹配捆绑包的安装方式。