WiX文档说,如果类型是MultiString,那么我们可以指定操作、追加、前置、写入(默认)。这里写动作是什么意思?它是简单地覆盖先前的条目,还是添加分号?如果它只是覆盖较早的条目,它与类型“ string ”有何不同
我相信write 会覆盖现有的值,无论是字符串还是多字符串,并强制执行指定的任何新字符串类型。Multi string与 string 不同,因为您可以通过<MultiStringValue>
元素添加字符串列表(常规字符串值不能这样做 - 它不能有 MultiStringValue 子元素):
<RegistryValue Id="R3" Root="HKCU" Action="write" Key="Software\_WiXTest"
Name="multi" Type="multiString" Value="samplemultistring">
<MultiStringValue>test2.1</MultiStringValue>
<MultiStringValue>test2.2</MultiStringValue>
</RegistryValue>
对于多字符串prepend在字符串列表的开头添加字符串,在字符串列表的末尾添加字符串。据我所知,多字符串不是分号分隔的,而是一系列以空字符结尾的字符串,以空字符串 ( \0
)结尾。请参阅注册表值类型:
示例 Multi String : String1\0String2\0String3\0LastString\0\0
,以及它的外观regedit.exe
(使用对比鲜明的常规字符串):
只需转储一些示例测试标记 - 疣和所有 :-) - 如果您愿意,您可以用于测试:
<Component Feature="MainApplication" Id="HKCU" Guid="*">
<RegistryValue Id="R1" Root="HKCU" Key="Software\_WiXTest" KeyPath="yes"
Name="WiXWritten" Type="string" Value="R1 regular string">
</RegistryValue>
<RegistryValue Id="R2" Root="HKCU" Action="append" Key="Software\_WiXTest"
Name="WiXWritten" Type="multiString" Value="R2 sample multistring">
<MultiStringValue>test1.1</MultiStringValue>
<MultiStringValue>test1.2</MultiStringValue>
<MultiStringValue>test1.3</MultiStringValue>
</RegistryValue>
<RegistryValue Id="R3" Root="HKCU" Action="write" Key="Software\_WiXTest"
Name="WiXWritten" Type="multiString" Value="R3 sample multistring">
<MultiStringValue>test2.1</MultiStringValue>
<MultiStringValue>test2.2</MultiStringValue>
</RegistryValue>
</Component>
上面的一些元素会在安装时相互覆盖——据我所知,这是你不清楚的地方。也许将其转储到您的 WiX 源中并进行测试。
通过重复几个RegistryValue
元素,您可以获得与MultiStringValue
元素相同的效果。
尝试将最后一个RegistryValue
元素更改Action="write"
为Action="append"
。现在它添加到现有的多字符串而不是覆盖它。它应该变成:R2 sample multistring\0test1.1\0test1.2\0test1.3\0R3 sample multistring\0test2.1\0test2.2\0\0
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句