WiX RegistrySearch多字符串搜索失败,普通字符串搜索正常求助
解决WiX RegistrySearch多字符串(REG_MULTI_SZ)搜索失败的问题
从你提供的安装日志能明显看出:普通字符串类型的注册表项搜索(比如MYSERVICE)能正常拿到值,但多字符串类型的MYKEY返回了空值——这其实是WiX默认的RegistrySearch行为导致的:它默认只处理REG_SZ/REG_EXPAND_SZ这类单字符串类型,对REG_MULTI_SZ必须显式指定类型才能正确读取。
下面是具体的解决步骤和注意事项:
1. 给RegistrySearch显式指定multiString类型
在WiX代码里,针对多字符串类型的注册表项,一定要添加Type="multiString"属性,否则WiX会用单字符串的逻辑去读取,自然拿不到正确值。
示例代码:
<Property Id="MYKEY"> <RegistrySearch Id="Search_MYKEY" Root="HKLM" Key="SOFTWARE\YourCompany\YourProduct" Name="MultiStringValueName" Type="multiString" /> </Property>
2. 注意多字符串值的存储格式
成功读取后,多字符串值在WiX属性里会以分号分隔的字符串形式存在(比如value1;value2;value3)。如果后续要在自定义动作里处理这个值,记得按分号拆分内容。
3. 确认注册表项的实际类型
先通过注册表编辑器(regedit.exe)确认你要搜索的项确实是REG_MULTI_SZ类型,别因为类型不匹配白忙活——比如误把REG_SZ当成多字符串处理,也会出问题。
4. 排查32/64位兼容性问题
如果你的安装包是32位的,在64位系统上搜索HKLM\SOFTWARE时,会自动重定向到HKLM\SOFTWARE\Wow6432Node。要是你的多字符串值存放在原生64位路径下,记得给RegistrySearch加上Win64="yes"属性:
<RegistrySearch Id="Search_MYKEY" Root="HKLM" Key="SOFTWARE\YourCompany\YourProduct" Name="MultiStringValueName" Type="multiString" Win64="yes" />
修改后重新打包安装,再看日志的话,MYKEY属性应该就能被正确赋值为分号分隔的多字符串内容,而不再是空值了。
内容的提问来源于stack exchange,提问作者user3664223
相关产品推荐
相关产品推荐

