我的WiX安装程序配置如下:
<Property Id="MY_PROPERTY">
...
<Registry Name="MyValue" Type="multiString" Value="[MY_PROPERTY]" />
现在我想在命令行中将此属性值作为列表传递:
MsiExec.exe /i MyInstaller.msi /qb MY_PROPERTY="One[~]Two[~]Three"
但是,安装程序不会将值拆分为列表,而是写入文字值。
如果我对元素进行硬编码,它就能正常工作:
<Registry Name="MyValue" Type="multiString" Value="One[~]Two[~]Three" />
有没有人知道如何在命令行中为multiString注册表值指定值列表?提前致谢
答案 0 :(得分:2)
迟到总比不到好! 这可以使用“自定义操作”来实现。
请仔细遵循此MS文档:https://docs.microsoft.com/en-us/windows/win32/msi/registry-table
在您的自定义操作中,如下所示将注册表值从属性插入MSI表中,
Set db = Session.Database
set oView = db.OpenView("INSERT INTO `Registry` (`Registry`,`Root`,`Key`,`Name`,`Value`,`Component_`) VALUES ('reg_MY_PROPERTY', -1,'Software\Company\Product','MyValue','" & _
Session.Property("MY_PROPERTY") & "','CM_CP_BlahBlah') TEMPORARY")
oView.Execute
oView.Close
CM_CP_BlahBlah是您的WIX组件的附加注册表值。
请注意:“自定义操作必须在操作序列中的RemoveRegistryValues和WriteRegistryValues操作之前进行”
<InstallExecuteSequence>
<Custom Action="SetMyPropertyCustomAction" Before="RemoveRegistryValues">NOT REMOVE</Custom>
</InstallExecuteSequence>
答案 1 :(得分:0)
REG_MULTI_SZ
一系列以null结尾的字符串,以空字符串(\ 0)结尾。 以下是一个例子: String1中\ 0String2 \ 0String3 \ 0LastString \ 0 \ 0 第一个\ 0终止第一个字符串,第二个\ 0终止最后一个字符串,最后的\ 0终止序列。请注意,必须将最终终止符分解为字符串的长度。
所以按照这个LINK你应该这样做:
MY_PROPERTY = “一个\ 0Two \ 0Three \ 0”
对于MULTISTRINGValues,请检查以下元素:MULTISTRINGVALUE