通过命令行将multiString值传递给安装程序

时间:2013-12-10 22:22:47

标签: wix windows-installer

我的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注册表值指定值列表?提前致谢

2 个答案:

答案 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