我在Wix 3.7上。我有一个MSI,我想设置一个注册表项(可能通过自定义操作,因为他将不得不检查密钥是否已经存在)。
据我所知,bootstrapper项目中的Bundle无法更改机器状态(例如设置注册表)。因此,我试图通过<MsiProperty>
传递命令行参数,但似乎不会在我的日志文件中显示为引导程序的命令行参数。
软件包:
<?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>
答案 0 :(得分:10)
您的MSI需要定义如下属性:
<Property Id="SOMEPROPERTY" Value="Default"/>
然后,您可以从捆绑包中设置此属性:
<MsiPackage SourceFile="<package>.msi" Id="SomeId">
<MsiProperty Name="SOMEPROPERTY" Value="[SomeProperty]" />
</MsiPackage>
在此之后,您可以按照此处所述在Bootstrapper中设置属性: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" />
答案 1 :(得分:0)
只需添加一些额外的信息即可。要在命令行中更改变量值,实际上我必须将其设置为可重写。
Dictionary<int, Owner> grouped =
myList.Items
.GroupBy(elem => elem.Id)
.ToDictionary(com => com.Key, com => new Owner()
{
Id = elem.Id,
Firstname = elem.Firstname
});