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

Inno Setup RegKeyExists返回False但注册表项实际存在问题

Inno Setup RegKeyExists 检测注册表项始终返回False问题排查

核心错误原因

代码中定义的注册表路径存在语法错误:子键路径开头多了一个前置反斜杠\。
Inno Setup 注册表类函数(包含RegKeyExists)的子键参数要求传入相对于所选根键的相对路径,不允许以反斜杠开头。你当前定义的OldVersionRegKey开头带\,会导致函数解析路径时,在根键下先查找名称为空的子项,再拼接后续的SOFTWARE\...路径,该路径在注册表中不存在,因此无论切换32位还是64位注册表视图,都会返回False。

直接修复方式

删除常量定义中路径开头的反斜杠即可:

const
  OldVersionRegKey = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1';

其他补充排查点

如果修正路径后仍然检测失败,可逐一核对以下常见场景:

  • 旧版本为当前用户安装:如果旧版本安装时选择的是「仅为我安装」而非「为所有用户安装」,卸载注册表项不会写入HKLM(机器级根键),而是写入HKCU(当前用户根键)下的对应路径,需要额外检测HKCU32/HKCU64视图下的同路径项
  • 安装包架构不匹配:32位安装包写入的卸载项,在64位系统上会自动重定向到WOW6432Node节点,对应Inno Setup的HKLM32/HKCU32根键;只有64位安装包的卸载项才会写入HKLM64/HKCU64对应的无重定向路径
  • 注册表虚拟化影响:如果旧版本安装时未获取管理员权限,向HKLM写入的操作会被Windows自动重定向到当前用户的虚拟化注册表路径,不会写入真实的HKLM节点,该场景下机器级路径检测必然失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:09:20