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

枚举注册表路径Country/region List失败,错误2(未找到)求助

问题分析与解决方案
  • 核心原因:注册表32位/64位重定向
    你碰到的问题本质是32位程序访问64位注册表项导致的。Windows为兼容32位程序,会自动把32位程序对HKEY_LOCAL_MACHINE\SOFTWARE的访问,重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node分支,但Country/region List实际只存在于64位的SOFTWARE分支里,不在重定向的路径中。

    这正好对应你遇到的两个现象:

    1. 枚举父节点Telephony时看不到RegEdit里的Country/region List——因为你枚举的是重定向后的32位分支子项,该子项仅在64位分支存在。
    2. 直接打开Country/region List报错误2(未找到)——32位程序默认访问重定向路径,自然找不到实际的64位项。
  • 解决办法
    调用CRegKey::Open时,添加KEY_WOW64_64KEY标志,强制绕过重定向,直接访问64位注册表分支:

    // 打开Country/region List时添加64位访问标志
    ASSERT(CRegKey{}.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Country/region List"), KEY_ENUMERATE_SUB_KEYS | KEY_WOW64_64KEY) == ERROR_SUCCESS);
    

    枚举父节点Telephony要看到64位分支的子项,同样需要加这个标志:

    if (regKey.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Telephony"), KEY_ENUMERATE_SUB_KEYS | KEY_WOW64_64KEY) == ERROR_SUCCESS)
    {
        for (DWORD dwIndex = 0; ; ++dwIndex)
        {
            TCHAR szCountry[64];
            DWORD dwLen = MfxCountOf(szCountry);
            if (regKey.EnumKey(dwIndex, szCountry, &dwLen) != ERROR_SUCCESS)
                break;
            // 处理枚举到的子项
        }
    }
    
  • 验证方式
    你可以手动打开RegEdit,查看HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Telephony,里面确实没有Country/region List;而64位的SOFTWARE分支下是存在该子项的,这能直接验证上述结论。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:32:57