Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从WiX捆绑包安装,使用MSI升级会导致安装多个版本_Wix - Fatal编程技术网

从WiX捆绑包安装,使用MSI升级会导致安装多个版本

从WiX捆绑包安装,使用MSI升级会导致安装多个版本,wix,Wix,我有一个应用程序,其安装程序可以以两种形式交付: MSI包;及 包含包和一些链接的先决条件的WiX包 大多数用户会选择安装捆绑包,但我希望保留手动安装必备组件和MSI包的可能性 我的自动更新过程包括下载一个新的MSI软件包并进行重大升级。只要应用程序最初是使用MSI软件包安装的,它就可以完美地工作。但是,如果应用程序是从bundle安装的,我最终会同时安装两个版本 如何确保使用下载的MSI进行的升级正确地替换或删除了原始捆绑包 Bundle.wxs: <?xml version="1.0

我有一个应用程序,其安装程序可以以两种形式交付:

  • MSI包;及
  • 包含包和一些链接的先决条件的WiX包
  • 大多数用户会选择安装捆绑包,但我希望保留手动安装必备组件和MSI包的可能性

    我的自动更新过程包括下载一个新的MSI软件包并进行重大升级。只要应用程序最初是使用MSI软件包安装的,它就可以完美地工作。但是,如果应用程序是从bundle安装的,我最终会同时安装两个版本

    如何确保使用下载的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):


    一个.msi包无法升级捆绑包;只有另一包才能做到这一点。但是.msi包可以升级最初由捆绑包安装的.msi包。ARP中有两个条目,而不是并排安装的两个软件包@Ravi的答案是正确的:使用
    ARPSYSTEMCOMPONENT
    确保.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>