我有一个应用程序,其安装程序可以以两种形式提供:
大多数用户会选择安装捆绑包,但我希望保留手动安装先决条件和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>
答案 0 :(得分:1)
.msi包无法升级捆绑包;只有另一个捆绑可以做到这一点但是.msi包可以升级最初由bundle安装的.msi包。你在ARP中得到两个条目,而不是两个并排安装的软件包。 @Ravi的回答是正确的:使用ARPSYSTEMCOMPONENT
确保.msi包不可见,以匹配包安装它的方式。