WiX Bootstrapper: 如何从命令行设置烧录变量?

19

使用WiX 3.7和.NET 4.0。

如何在命令行中运行WiX引导程序EXE时设置烧录变量?

1个回答

41

首先,您希望设置的Burn变量需要被设置为Overridable。要做到这一点,您必须在WXS中包含以下命名空间:xmlns:bal="http://schemas.microsoft.com/wix/BalExtension",如果您像我一样使用Visual Studio,则需要在项目引用中包含WixBalExtension.dll。接下来,您需要为所有想要通过命令行设置的burn变量添加以下属性:bal:Overridable="yes"

现在您可以通过以下方式通过命令行设置变量:

BootstrapperSetup.exe /i /passive MyBurnVariable1=1 MyBurnVariable2=2


下面是一个满足上述所有条件的WXS文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
         xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">

  <Bundle Name="MyProduct" Version="1.0.0" Manufacturer="MyManufacturer" UpgradeCode="PUT-UPGRADE-CODE-HERE">

    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
      <bal:WixStandardBootstrapperApplication LicenseUrl="MyLicense.htm" ThemeFile="MyThemeFile.xml" LocalizationFile="MyLocFile.wxl" />
    </BootstrapperApplicationRef>

    <Variable Name="MyBurnVariable1" bal:Overridable="yes" Type="numeric" Value="0" />
    <Variable Name="MyBurnVariable2" bal:Overridable="yes" Type="numeric" Value="0" />

    <Chain>
      <MsiPackage Id="MyFirstMsiPackage"
                  SourceFile="first.msi"
                  InstallCondition="MyBurnVariable1 = 1" />

      <MsiPackage Id="MySecondMsiPackage"
                  SourceFile="second.msi">
        <MsiProperty Name="MY_PROPERTY" Value="[MyBurnVariable2]" />
      </MsiPackage>
    </Chain>
  </Bundle>
</Wix> 

2
这对于WixStdBA是正确的,但对于托管引导程序应用程序则不是。因此,从cmdline解析和覆盖变量的逻辑不在burn核心中是奇怪的。 - stukselbax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接