2017-03-14 21 views
0

我已經在計算機上安裝了「ABC 10.1」程序版本,我想在每個新的ABC.msi安裝中刪除它(例如當ABC 10.2將被安裝)。Wix刪除從控制面板安裝了引導程序的以前的版本

到目前爲止,我已經使用BOOTSTRAPPER來安裝新版本,它的功能就像一個魅力(以前的版本是從控制面板中卸載和刪除,最新出現在控制面板中)。

現在我想使用ABC.msi進行安裝並且不使用BOOTSTRAPPER,但是當我使用ABC.msi安裝程序時,前一個不會從控制面板中刪除,而且我有兩個「ABC」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> 
+0

您的MSI UpgradeCode在兩個MSI版本之間需要保持一致,無論它們是使用引導程序安裝還是獨立安裝。 – khargoosh

+0

UpgradeCode在新msi和當前msi中是相同的(我已經使用orca軟件檢查過)。我不知道bootstraper是否有額外的功能 – corso

回答

0

一般的回答是:威克斯引導程序寫什麼入境在「ABC 10.1」版本的控制面板中。爲了消除這種情況,你的10.2版本需要有一個自定義動作,告訴以前的軟件包要自行卸載(「previous-cached-bundle.exe/silent/uninstall」或類似的東西)。現在,無論您是先告訴舊軟件包先自行刪除,還是讓您的MSI先升級,都可以達到您自己的要求。

相關問題