multiString 类型的 RegistryValue 元素
RegistryValue Element of type multiString
WiX doc 说如果类型是 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 将字符串添加到字符串列表的开头,append 将字符串添加到字符串的末尾列表。据我所知,Multi strings 不是以分号分隔的,而是一系列以 null 结尾的字符串,以空字符串 ([=13=]
) 结尾。见 Registry Value Types:
多字符串示例:String1[=14=]String2[=14=]String3[=14=]LastString[=14=][=14=]
,以及它在 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[=21=]test1.1[=21=]test1.2[=21=]test1.3[=21=]R3 sample multistring[=21=]test2.1[=21=]test2.2[=21=][=21=]
.
WiX doc 说如果类型是 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 将字符串添加到字符串列表的开头,append 将字符串添加到字符串的末尾列表。据我所知,Multi strings 不是以分号分隔的,而是一系列以 null 结尾的字符串,以空字符串 ([=13=]
) 结尾。见 Registry Value Types:
多字符串示例:String1[=14=]String2[=14=]String3[=14=]LastString[=14=][=14=]
,以及它在 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[=21=]test1.1[=21=]test1.2[=21=]test1.3[=21=]R3 sample multistring[=21=]test2.1[=21=]test2.2[=21=][=21=]
.