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

使用TRegistry读取MachineGuid失败问题求助

解决TRegistry读取MachineGuid失败的问题

问题原因

在64位Windows系统中,32位程序访问HKEY_LOCAL_MACHINE\SOFTWARE时会被系统自动重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node分支,而MachineGuid实际存储在64位的SOFTWARE主分支下,这就导致32位程序直接读取时找不到目标值。

解决方案

创建TRegistry实例时,在权限参数中添加KEY_WOW64_64KEY标志,强制程序访问64位注册表分支(32位系统会忽略该标志,不影响兼容性)。同时要检查OpenKey的返回值,避免键打开失败后误判值不存在。

修改后的代码

AnsiString S = "MachineGuid: ";
TRegistry* Registry = new TRegistry(KEY_READ | KEY_WOW64_64KEY);
try {
    Registry->RootKey = HKEY_LOCAL_MACHINE;
    // 先确认注册表键是否成功打开
    if (Registry->OpenKey("SOFTWARE\\Microsoft\\Cryptography", false)) {
        if (Registry->ValueExists("MachineGuid")) {
            S += Registry->ReadString("MachineGuid");
        } else {
            S += "Value not found!";
        }
    } else {
        S += "Failed to open registry key!";
    }
} __finally {
    delete Registry;
}
Memo2->Lines->Add(S);

额外说明

  • 如果你的程序编译为64位版本,默认会直接访问64位注册表分支,无需添加KEY_WOW64_64KEY标志,但保留该标志可提升代码兼容性。
  • 始终检查OpenKey的返回值,能帮你快速定位是键打开失败还是值不存在的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:56:12