2013-03-01 78 views
4

我有一個WiX bundle,它安裝MSI並檢查是否安裝了.NET。在安裝捆綁包(和安裝程序)時,一切都按預期工作。WiX軟件包升級:在刪除舊版本之前安裝了MSI的新版本

我的問題是捆綁包升級時。在升級中,軟件包首先安裝MSI的v_Next,然後卸載MSI的v_Previous。

如何更改此訂單?我希望在升級v_Next之前卸載MSI的v_Previous。

下面是我的包:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" 
    xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"> 

    <Bundle Name="MyProductName" 
      Version="1.0.0.0" 
      Manufacturer="MyCompanyName" 
      UpgradeCode="4abf3f67-1234-35b1-b2c1-dd7649b60e1d"> 

     <BootstrapperApplicationRef 
      Id="WixStandardBootstrapperApplication.RtfLicense"> 

      <bal:WixStandardBootstrapperApplication 
       SuppressOptionsUI="yes" 
       LicenseFile="License.rtf" 
       ThemeFile="Theme.xml" 
       LogoFile="MyProductName.png" 
      /> 
      <Payload 
       Name="BootstrapperCore.config" 
       SourceFile="BootstrapperCore.config"/> 
      <Payload 
       SourceFile="NetfxLicense.rtf"/> 
     </BootstrapperApplicationRef> 
     <Chain> 
      <PackageGroupRef 
       Id="Netfx4Full"/> 
      <MsiPackage 
       Compressed="yes" 
       SourceFile="$(var.SolutionDir)\Setup\MyProductName.msi" 
       Vital="yes"> 
      </MsiPackage> 
     </Chain> 
    </Bundle> 
    <Fragment> 
     <WixVariable 
      Id="WixMbaPrereqPackageId" 
      Value="Netfx4Full" /> 
     <WixVariable 
      Id="WixMbaPrereqLicenseUrl" 
      Value="NetfxLicense.rtf" /> 

     <util:RegistrySearch 
      Root="HKLM" 
      Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" 
      Value="Version" 
      Variable="Netfx4FullVersion" /> 
     <util:RegistrySearch 
      Root="HKLM" 
      Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" 
      Value="Version" 
      Variable="Netfx4x64FullVersion" 
      Win64="yes" /> 

     <PackageGroup 
      Id="Netfx4Full"> 

      <ExePackage 
       Id="Netfx4Full" 
       Cache="no" 
       Compressed="no" 
       PerMachine="yes" 
       Permanent="yes" 
       Vital="yes" 
       SourceFile="$(var.SolutionDir)\packages\dotNetFx40_Full_x86_x64.exe" 
       DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193" 
       DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)"/> 
     </PackageGroup> 
    </Fragment> 
</Wix> 

謝謝羅布的回答。我試圖做到這一點,但它不工作(我surelly失去了一些東西)......這是我的MSI:

<Product Id="*" 
     Name="MyProductName" 
     Language="1033" 
     Version="1.0.0.0" 
     Manufacturer="MyCompanyName" 
     UpgradeCode="aa027fd0-5111-1236-9af6-55581a588123"> 
    <Package InstallerVersion="200" 
      Compressed="yes" 
      InstallScope="perMachine" /> 
    <MajorUpgrade DowngradeErrorMessage="A newer version of MyProductName is already installed." 
        AllowDowngrades="no"/> 
    <MediaTemplate /> 

    <Feature Id="ProductFeature" 
      Title="MyProductName" 
      Level="1"> 
     <ComponentRef Id="ApplicationShortcut" /> 
     <ComponentGroupRef Id="AllFiles" /> 
    </Feature> 
</Product> 

如果我運行v_previous MSI,然後v_Next MSI(單獨,不在捆綁中)我都安裝了,所以沒有升級正在執行。我究竟做錯了什麼?


沒關係,MajorUpgrade正在工作。我的版本編號在vNext MSI中是錯誤的。我現在需要添加次要的升級支持。

回答

3

升級包總是在今天**的最後一次卸載。要刪除v_Previous.msi之前v_Next.msi,有v_Next.msi主要升級(請參閱MajorUpgrade elementv_Previous.msi

**我認爲有一項功能請求允許其他展示位置,但尚未實施。

+0

謝謝Rob,請在下面查看我的評論。 – Nighthawk 2013-03-01 14:35:16

相關問題