You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wix Bootstrapper RegistrySearch无法找到注册表值问题求助

问题分析与解决方案

你遇到的日志错误显示系统在SOFTWARE\[COMPANY_NAME]\路径下找不到Bitness值,但你的代码里明明指定了完整路径SOFTWARE\[COMPANY_NAME]\[PRODUCTNAME],这说明实际执行时搜索路径可能发生了变化,或者存在注册表视图、变量替换的问题,以下是具体排查和修复方案:

1. 解决注册表重定向问题(32/64位视图差异)

Bootstrapper默认以32位进程运行,会自动将HKLM\SOFTWARE路径重定向到HKLM\SOFTWARE\Wow6432Node。如果你安装的是64位程序,注册表键实际存储在64位视图的HKLM\SOFTWARE\[COMPANY_NAME]\[PRODUCTNAME]下,32位进程无法直接读取到。

修复方法:在两个RegistrySearch节点中添加Win64="yes"属性,强制读取64位注册表视图:

<!-- Check if program is installed -->  
<util:RegistrySearch Id="CheckProgramInstalled"
                      Root="HKLM"
                      Key="SOFTWARE\[COMPANY_NAME]\[PRODUCTNAME]"
                      Result="exists"
                      Variable="ProgramInstalled"
                      Win64="yes" />
<!-- Check bitness of the program -->   
<util:RegistrySearch Id="CheckProgramBitness"
                      After="CheckProgramInstalled"
                      Root="HKLM"
                      Key="SOFTWARE\[COMPANY_NAME]\[PRODUCTNAME]"
                      Value="Bitness"
                      Result="value"
                      Variable="ProgramBitness"
                      Win64="yes"
                      Condition="ProgramInstalled" />

2. 确认变量替换是否正确生效

日志中显示的搜索路径是SOFTWARE\[COMPANY_NAME]\,缺少了[PRODUCTNAME]部分,这很可能是[PRODUCTNAME]变量未被正确替换。请检查你的Bundle文件:

  • 是否通过<?define PRODUCTNAME="你的产品名"?>定义了该变量
  • 变量名称是否拼写正确(区分大小写)
  • 如果是通过外部参数传递变量,确认参数是否正确传入

3. 添加搜索执行条件避免无意义报错

第二个注册表搜索应该仅在程序已安装(即ProgramInstalled为true)时执行,否则当程序未安装时,注册表键不存在会触发错误。在CheckProgramBitness节点中添加Condition="ProgramInstalled"属性(如上面的代码示例),可以避免这种情况。

内容的提问来源于stack exchange,提问作者Leanne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:40:21