如何从Bundle元素中包含的MsiPackage中选择功能?

时间:2014-06-24 21:57:43

标签: wix windows-installer burn wix-extension wix3.8

我有一个使用WiX Burn v3.8创建的exe。我们称之为Bundle.exe。在这个捆绑包中,我有一个具有3个功能的MSI,其中两个嵌套在一个。我想从命令行调用Bundle.exe并将所选功能传递给我的MSI。我应该注意,我有一个现有的UI,让用户选择要安装的功能,所以我不想使用WiX Bootstrapper应用程序。

//Fragment of my MSI.wxs

    <Feature Id="One">
      //ComponentRefs
      <Feature Id='A' >        
        //ComponentRefs
      </Feature>
      <Feature Id="B" >
        //ComponentRefs
      </Feature>
    </Feature>

//Fragment of my Bundle.wxs

    <Bundle>
      <Chain>
        //List of MsiPackages
      </Chain>
    </Bundle>

1 个答案:

答案 0 :(得分:3)

在默认的bootstrapper中,这是我们从命令行传递参数的方式:

<Wix>
  <Bundle> 
    <Variable Name="CommandLineArgument" bal:Overridable="yes"/>
    <Chain>
      <MsiPackage>
        <MsiProperty Name="CommandLineArgument" Value="[CommandLineArgument]"/>
      </MsiPackage>
    </Chain>
  </Bundle>
</Wix>

记下BAL:Overridable。这就是我如何确保我们可以从命令行传递属性值。不要忘记将名称空间声明添加到Wix元素xmlns:bal =&#34; http://schemas.microsoft.com/wix/BalExtension",并链接到WixBalExtension.dll。

在您的情况下,您应该为特征值[s]指定的MSI属性应为&#34; ADDLOCAL&#34;。

<MsiProperty Name="ADDLOCAL" Value="[CommandLineArgument]"/>

要从命令行执行捆绑,请执行以下操作:

bundle.exe CommandLineArgument = One,A,B