将命令行参数从WiX包传递到MSI

将命令行参数从WiX包传递到MSI,wix,windows-installer,wix3.7,Wix,Windows Installer,Wix3.7,我在WIX3.7上。我有一个MSI,我想设置一个注册表项(可能通过一个自定义操作,因为他必须检查该项是否已经存在) 我知道引导程序项目中的捆绑包不能更改机器状态(例如设置注册表)。因此,我试图通过传递命令行参数,但在我的引导程序日志文件中似乎没有显示为命令行参数 可以在捆绑包中设置注册表项吗 如果没有,如何添加命令行参数(或其他自定义数据) 要传递给MSI MSI如何读取我传递给它的任何内容(无论它最终是命令行arg还是其他内容) 否则) 捆绑: <?xml version="1.0" e

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

我知道引导程序项目中的捆绑包不能更改机器状态(例如设置注册表)。因此,我试图通过
传递命令行参数,但在我的引导程序日志文件中似乎没有显示为命令行参数

  • 可以在捆绑包中设置注册表项吗
  • 如果没有,如何添加命令行参数(或其他自定义数据) 要传递给MSI
  • 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需要定义如下属性:

    <Property Id="SOMEPROPERTY" Value="Default"/>
    
    
    
    然后,您可以从包中设置此属性:

    <MsiPackage SourceFile="<package>.msi" Id="SomeId">
        <MsiProperty Name="SOMEPROPERTY" Value="[SomeProperty]" />
    </MsiPackage>
    
    
    
    在此之后,您可以在引导程序中设置属性,如下所述:

    请注意,SomeProperty是一个必须定义的Burn变量:

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

    在MSI中,您可以基于以下属性执行注册表搜索:

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

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

    <Variable Name="SomeProperty" Type="string" Value="true" bal:Overridable="yes" />
    
    
    
    这很有效。我认为主要的问题是我的bundle项目中有一个GenerateBootstrapper,它实际上是一个非wix setup.exe,并且忽略了我在bundle中定义的任何内容。MSI命令行上的属性必须是公共属性。而公共财产则全部在首都。因此,它需要是SETLOCALDB,而不是SETLOCALDB。也需要在MSI中声明为所有首都。