21

我正在使用 VS2010 和 WiX 3.6 创建 MSI 包并将它们捆绑到 Bootstrapper 设置中。这是我的 Boostrapper 代码。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Bundle Name="" Version="" Manufacturer="" UpgradeCode="">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />

        <Chain>
              <MsiPackage SourceFile="Package1.msi">
                <MsiProperty Name="PARAM1" Value="[PARAM1]" />
                <MsiProperty Name="PARAM2" Value="[PARAM2]" />
              </MsiPackage>
              <MsiPackage SourceFile="Package2.msi">
                <MsiProperty Name="PARAM1" Value="[PARAM1]" />
                <MsiProperty Name="PARAM2" Value="[PARAM2]" />
              </MsiPackage>
        </Chain>
    </Bundle>
</Wix>

MSI 包必须具有指定的参数才能运行。通常,我会打电话给"Packag21.msi PARAM1=1 PARAM2=2". 构建项目后,我尝试以相同的方式将参数传递给我的 Bootstrapper.exe Bootstrapper.exe PARAM1=1 PARAM2=2,但似乎没有将它们传递给 MSI。安装因缺少参数情况而挂起。

有没有办法将参数从exe传递到msi?

4

2 回答 2

36

这现在已经实现,并且在 5 月 21 日的 Wix 3.6 RC 版本中可用。

以下是其工作原理的总体思路:

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

您必须创建一个可在命令行覆盖的捆绑变量,然后将该变量传递给您的 msi。

于 2012-07-09T23:17:27.507 回答
5

这目前在标准引导程序中不可用:WixStdBa 不提供命令行属性 - ID:3489809

如果您创建自己的引导程序应用程序,则可以实现此类功能。

编辑:虽然您不能通过命令行将参数传递给引导程序,但您仍然可以通过各种方式在引导程序中收集信息:

例如:设置变量

<Variable Name="PARAM1" Value="SomeValue" Persisted="yes" Type="string" />

例如:搜索注册表

<util:RegistrySearch Root="HKLM" Key="Software\SomeProduct" Value="SomeKey" Variable="PARAM1" Result="value"/>
于 2012-05-08T18:33:52.813 回答