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