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

Inno Setup中RegQueryStringValue读取HKEY_LOCAL_MACHINE值失败

问题根因

代码读取不到注册表值、无日志输出由5个核心错误导致:

  • 注册表重定向拦截:32位Inno Setup安装包在64位Windows系统运行时,默认会被系统重定向到Wow6432Node下的32位兼容注册表路径,系统版本相关的注册表值存储在64位注册表路径下,不加特殊标记无法读取。
  • 值类型不匹配:CurrentMajorVersionNumber是REG_DWORD类型值,你使用读取字符串的RegQueryStringValue接口读取,类型不匹配会直接返回读取失败。
  • 路径格式错误:传入的注册表子路径开头多了前置反斜杠\,Inno Setup的注册表查询接口要求子路径不能以反斜杠开头,否则会直接查询失败。
  • 函数逻辑缺失:InitializeSetup是要求返回布尔值的生命周期函数,你没有给Result赋值,会返回随机值,可能直接中断安装流程。
  • 日志未开启:Inno Setup的Log接口输出需要开启安装日志才会落盘,运行安装包时必须加/log="你的日志保存路径.txt"启动参数,否则所有Log调用的内容都不会被记录。

修复方案

  1. 读取系统版本这类64位注册表路径下的值时,根键使用HKEY_LOCAL_MACHINE_64替代原有的HKEY_LOCAL_MACHINE,绕过系统32位注册表重定向。
  2. 读取DWORD类型的CurrentMajorVersionNumber时,改用RegQueryDWordValue接口,对应变量类型改为Cardinal(无符号32位整数),输出日志时用IntToStr转成字符串。
  3. 删掉注册表子路径开头多余的前置反斜杠。
  4. 给InitializeSetup函数补上默认返回值,正常允许安装流程继续就赋值Result := True。
  5. 测试时加日志启动参数运行安装包,才能看到日志输出。

修复后的完整可运行代码:

function InitializeSetup(): Boolean;
var
  ProductName: string;
  CurrentMajorVersionNumber: Cardinal;  
begin
  // 设置默认返回值,允许安装流程继续
  Result := True;

  // 读取64位注册表下的字符串类型ProductName
  if RegQueryStringValue(
       HKEY_LOCAL_MACHINE_64, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion',
       'ProductName', ProductName) then
  begin        
    Log('  > ProductName:' + ProductName);
  end
  else
  begin
    Log('  > 读取ProductName失败,请检查权限或系统版本');
  end;

  // 读取64位注册表下的DWORD类型CurrentMajorVersionNumber
  if RegQueryDWordValue(
       HKEY_LOCAL_MACHINE_64, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion',
       'CurrentMajorVersionNumber', CurrentMajorVersionNumber) then
  begin        
    Log('  > CurrentMajorVersionNumber:' + IntToStr(CurrentMajorVersionNumber));
  end
  else
  begin
    Log('  > 读取CurrentMajorVersionNumber失败,请检查权限或系统版本');
  end;
end;

补充说明:如果你已经在安装脚本里设置了ArchitecturesInstallIn64BitMode=x64,即安装包本身以64位进程运行,那直接用HKEY_LOCAL_MACHINE即可,不需要加_64后缀。但统一用HKEY_LOCAL_MACHINE_64读取系统版本信息兼容性更好,不受安装包位数配置影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:39:09