【问题标题】:Passing command line args to MSI from WiX bundle将命令行参数从 WiX 包传递给 MSI
【发布时间】:2013-07-17 18:46:26
【问题描述】:

我使用的是 Wix 3.7。我有一个 MSI,我想设置一个注册表项(可能通过自定义操作,因为他必须检查该项是否已经存在)。

我了解引导程序项目中的 Bundle 无法更改机器状态(例如设置注册表)。因此,我试图通过<MsiProperty> 传递命令行参数,但在我的引导程序日志文件中似乎没有显示为命令行参数。

  1. 是否可以在 Bundle 中设置注册表项?
  2. 如果没有,如何添加命令行参数(或其他一些自定义数据) 传递给 MSI。
  3. MSI 如何读取我传递给它的任何内容(无论它最终是命令行 arg 还是什么 否则)。

捆绑:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle 
          Name="MyInstallerBootstrapperLocalDb" 
          Version="1.0.0.0" 
          Manufacturer="some company" 
          UpgradeCode="PUT-GUID-HERE">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Chain>
      <MsiPackage Id="MyInstallerInstaller" 
                  SourceFile="$(var.MyInstallerInstaller.TargetPath)" 
                  Compressed="no">
        <!-- TODO - if this is being set correctly, the MSI needs to 
                    interpret it and set up the key-->
        <MsiProperty Name="SetLocalDb" Value="yes"/>
      </MsiPackage>
    </Chain>
  </Bundle>
</Wix>

【问题讨论】:

  • MSI 命令行上的属性必须是 PUBLIC 属性。公共财产就是全部大写的财产。所以,它需要是 SETLOCALDB,而不是 SetLocalDb。并且需要在 MSI 中声明为所有大写字母。

标签: wix windows-installer wix3.7


【解决方案1】:

只是为了添加一点额外的信息。要使用命令行更改变量值,我实际上必须将其设置为可覆盖。

<Variable Name="SomeProperty" Type="string" Value="true" bal:Overridable="yes" />

【讨论】:

    【解决方案2】:

    您的 MSI 需要像这样定义一个属性:

    <Property Id="SOMEPROPERTY" Value="Default"/>
    

    然后您可以从包中设置此属性:

    <MsiPackage SourceFile="<package>.msi" Id="SomeId">
        <MsiProperty Name="SOMEPROPERTY" Value="[SomeProperty]" />
    </MsiPackage>
    

    在此之后,您可以在引导程序中设置属性,如下所述:WiX Bootstrapper: How do I set burn variables from the command line?

    注意 SomeProperty 是一个 Burn 变量,您必须定义它:

    <Variable Name="SomeProperty" Type="string" Value="DefaultValue" />
    

    更新:

    在 MSI 中,您可以根据此属性进行注册表搜索:

    <RegistrySearch Id="GetSomeValue" Root="HKLM" Key="SOFTWARE\<Manufacturer>\[SOMEPROPERTY]" Name="<ValueName>" Type="raw" />
    

    【讨论】:

    • 这行得通。我认为主要问题是我的包项目执行了 GenerateBootstrapper 这实际上使其成为非 wix setup.exe,并忽略了我在包中定义的任何内容。
    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2017-10-22
    • 2019-10-12
    相关资源
    最近更新 更多