2013-03-01 82 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

相关问题