WiX doc表示如果type为 MultiString ,那么我们可以指定操作,追加,前置,写入(默认)。 什么是写行动的意思?它只是覆盖了之前的条目,还是用分号添加? 如果它只是覆盖了之前的条目,它与类型" 字符串"
的区别答案 0 :(得分:0)
我相信写会覆盖字符串或多字符串的现有值,并强制指定任何新的字符串类型。 多字符串与字符串不同,因为你可以通过<MultiStringValue>
元素添加一个stings列表(常规字符串值不能这样做 - 它不能有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 ,在字符串列表的开头添加字符串, append 将字符串添加到字符串列表的末尾。据我所知,多字符串不是以分号分隔的,而是以空字符串(\0
)结尾的一系列以空字符结尾的字符串。见Registry Value Types:
示例多字符串: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
。