Wix从控制面板中删除与Bootstrapper一起安装的先前版本

时间:2017-03-14 14:26:16

标签: installation wix

我得到了#ABC; ABC 10.1"已经安装在计算机上的程序版本,我想在每个较新的ABC.msi安装中删除它(例如,当安装ABC 10.2时)。

到目前为止,我已经使用了一个BOOTSTRAPPER来安装新版本,它就像一个魅力(之前的版本已经从控制面板中卸载并删除,最新版本出现在控制面板中)。

现在我想使用ABC.msi进行安装并且不使用BOOTSTRAPPER,但是当我使用ABC.msi安装程序时,前一个没有从控制面板中删除而且我有两个" ABC& #34;控制面板中有10.1和10.2版本。

如何在最新的ABC.msi安装过程中删除BOOTSTRAPPER安装的ABC以前版本(并避免在控制面板中复制ABC)?

Bundle.wxs

<Bundle 
Name="$(var.ProductName)" 
Version="$(var.ShowVersion)" 
Manufacturer="ABC" 
UpgradeCode="33312c8d-64f1-4a04-a98e-4aa692de6aaf"
IconSourceFile="$(var.BaseDir)\Setup\UI\ABC.ico" 
Condition="((VersionNT = v6.1 AND ServicePackLevel &gt;= 1) OR (VersionNT &gt; v6.1)) AND (WixBundleInstalled = 0)">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
  <bal:WixStandardBootstrapperApplication 
    LicenseFile="$(var.BaseDir)\Setup\UI\License.rtf" 
    LogoFile="$(var.BaseDir)\Setup\UI\OticonAppIcon.png"
    SuppressOptionsUI="yes"
    ShowVersion="yes"/>
</BootstrapperApplicationRef>

    <Chain>
  <!-- Install .Net 4.6.1  -->
  <PackageGroupRef Id='NetFx461Redist'/>

  <!-- my packages to install -->
  <PackageGroupRef Id="InstallerPackages" />        
</Chain>


</Bundle>
<Fragment>
<PackageGroup Id ="InstallerPackages" >
  <MsiPackage SourceFile="$(var.OutDir)\ABC.MSI" />
  <MsiPackage SourceFile="$(var.OutDir)\DatabaseInstallerABC.msi" />
</PackageGroup>
</Fragment>

productABC.wxs(创建ABC.msi的文件)如下:

<?xml version="1.0" encoding="UTF-8"?>
<?include .\defines.wxi ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"      xmlns:fire="http://schemas.microsoft.com/wix/FirewallExtension"      xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="$(var.ProductCode)" 
  Codepage="1252" Language="1033" 
  Manufacturer="ABC" Name="$(var.ProductName)" 
  UpgradeCode="{3338CE6B-D733-41AF-830B-DCAFE2E0CD58}" 
  Version="$(var.ProductVersion)">
 <Package Id="*" 
 Compressed="yes" 
InstallerVersion="300" 
Languages="1033" 
Manufacturer="ABC" 
Platform="x86" />

<Media Id="1" 
Cabinet="media1.cab" 
EmbedCab="yes" />

----some directories and components----

<MajorUpgrade
  Schedule="afterInstallInitialize"
  DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." 
  AllowSameVersionUpgrades="yes"/>

<InstallExecuteSequence>
  <LaunchConditions After="AppSearch" />
  <Custom Action="SetTargetDir" Before="CostFinalize"></Custom>
  <Custom Action="SaveTargetDir" After="InstallValidate"></Custom>
</InstallExecuteSequence>

<WixVariable Id="WixUILicenseRtf" Value="$(var.BaseDir)\Setup\UI\License.rtf" />
<WixVariable Id="WixUIBannerBmp" Value="$(var.BaseDir)\Setup\UI\bannrbmp.bmp" />
<WixVariable Id="WixUIDialogBmp" Value="$(var.BaseDir)\Setup\UI\ABCbackground.bmp" />

</Product>
</Wix>

1 个答案:

答案 0 :(得分:0)

通用答案:wix bootstrapper是在“ABC 10.1”版本的控制面板中写入条目的内容。为了删除它,你的10.2版本需要有一个自定义操作告诉上一个bundle自己卸载(“previous-cached-bundle.exe / silent / uninstall”或类似的东西)。现在,您是否先告诉旧捆绑包将自行删除,或者您允许MSI首先升级,这取决于您自己的要求。