WiX - Burn是否支持两用msi包?

时间:2014-05-12 10:07:02

标签: wix wix3.7

Burn是否支持根据these Microsoft guidelines准备的双用途(每用户或每台机器)MSI包?

我尝试准备这样的软件包,但它看起来像是使用Burn创建的引导程序,不会卸载MSI软件包,该软件包是在最终用户提高UAC权限后按机器安装的。

Burn的源代码是:

<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 Version="1.0" 
              Name="AppNameHere"
          UpgradeCode="GuidHere">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense" >
      <bal:WixStandardBootstrapperApplication LicenseUrl=""
                                              SuppressOptionsUI="yes" 
                                              ThemeFile="Customization\Theme.xml"
                                              LocalizationFile="Customization\LangHere.wxl"/>
    </BootstrapperApplicationRef>
    <Chain>
      <PackageGroupRef Id="WindowsInstaller45"/>
      <PackageGroupRef Id="NetFx40ClientRedist"/>  <!-- Uzywa rozszerzenia WixNetfxExtension do zainstalowania .net -->
      <PackageGroupRef Id="vcredist"/>
      <MsiPackage Compressed="yes" 
                  SourceFile="MsiFileNameHere"
                  DisplayInternalUI="yes">
        <MsiProperty Name="UPDATEDIR" Value="[UninstallPath]"/>
        <MsiProperty Name="WIXBUNDLEKEY" Value="[WixBundleProviderKey]"/>
      </MsiPackage>
        </Chain>
  </Bundle>
  <Fragment>
    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86" Value="Installed" Variable="vcredistkeyx86" /> 
    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\x86" Value="Installed" Variable="vcredistkeyx64" /> 
    <PackageGroup Id="vcredist">
        <ExePackage Id="vcredist_x86" 
                    Cache="no" 
                    Compressed="yes" 
                    PerMachine="yes" 
                    Permanent="yes" 
                    Vital="yes" 
                    SourceFile="Components\vcredist_x86.exe"
                    DetectCondition="(vcredistkeyx86 AND (vcredistkeyx86 &gt;= 1)) OR (vcredistkeyx64 AND (vcredistkeyx64 &gt;= 1))" />
    </PackageGroup>
    <PackageGroup Id="WindowsInstaller45">
      <ExePackage Cache="no" 
                  Compressed="yes" 
                  PerMachine="yes" 
                  Permanent="yes" 
                  Vital="yes"
                  SourceFile="Components\WindowsXP-KB942288-v3-x86.exe"
                  InstallCondition="VersionNT=v5.1 AND NOT VersionNT64 AND VersionMsi &lt; v4.5"
                  InstallCommand="/quiet /norestart">
        <ExitCode Behavior="forceReboot"/>
      </ExePackage>      
    </PackageGroup>
  </Fragment>  
</Wix>

1 个答案:

答案 0 :(得分:0)

从WIX V3.9开始,答案是合格的#34; No&#34; - Burn目前不支持双用户每用户或每台机器MSI包。

两用MSI包的ALLUSERS属性设置为&#34; 2&#34;。当您构建引用此类MSI包的WIX引导程序项目时,您应该看到此类警告:

  

2&gt; D:\ Robert \ Documents \ Visual Studio 2013 \ Projects \ BurnTest \ Bootstrapper \ Bundle.wxs(18,0):警告LGHT1133:捆绑包需要每个计算机或每个用户的程序包。 MSI&#39; D:\ Robert \ Documents \ Visual Studio 2013 \ Projects \ BurnTest \ SetupProject \ bin \ Release \ SetupProject.msi&#39; ALLUSERS Property设置为&#39; 2&#39;在安装时可能会从每个用户更改为每台计算机。 Bundle将假设包是每台机器,如果更改将无法正常工作。如果可能,请删除ID =&#39; ALLUSERS&#39;并使用Package / @ InstallScope属性。

WIX引导程序项目的构建过程将尝试从链接包中找出要创建的类型的刻录安装(每个用户或每个计算机)。逻辑是错综复杂的,因为您可以为每个用户或每台机器声明一个首选项的不同位置,以及链接包之间的潜在冲突。但总的想法是刻录编译器将生成每台计算机的安装,除非其中一个链式包是按用户进行的,这会将刻录安装转换为每用户模式。关键是决定在构建时创建每用户或每机器包。要正确支持两用MSI软件包,需要将决策移动到安装时间。