我试图从注册表项获取一个值,最终的程序必须在 32 位和 64 位机器上运行。
到目前为止的代码是:
HKEY hKey;
LONG Result1;
LONG result2;
Result1 = RegOpenKeyEx(HKEY_CLASSES_ROOT,L"Word.Application\\CurVer",0,KEY_READ,&hKey);
cout << Result1;
cout << "\n";
TCHAR value[255];
DWORD BufferSize = 255;
result2 = RegGetValue(hKey, L"Word.Application\\CurVer", L"", RRF_RT_ANY, NULL, (PVOID)&value, &BufferSize);
cout << result2;
我从 RegGetValue 收到错误“2”,并查看了这个RegOpenKeyEx/RegGetValue 对存在的键返回 ERROR_FILE_NOT_FOUND它说如果它是“64 位操作系统上的 32 位代码”,它将无法工作,但我不明白这意味着什么。
是必须针对不同架构编译的程序,还是特定于 32 位的 RegGetValue?
抱歉,我的大部分 C++ 编程都是在 64 位计算机成为主流之前完成的,此后我偶尔编写的项目都没有遇到此问题。
在 64 位 Windows 上有两个注册表视图:32 位视图和 64 位视图。 MSDN 上的主题中对此进行了描述访问备用注册表视图.
默认情况下,32 位进程将从 32 位视图读取,64 位进程将从 64 位视图读取。如果您希望从特定视图读取,无论进程的体系结构如何,您都需要提供以下标志之一:KEY_WOW64_64KEY
or KEY_WOW64_32KEY
.
因此,如果您需要的数据位于 32 位视图中,请传递KEY_WOW64_32KEY
。如果数据在64位视图通道中KEY_WOW64_64KEY
。如果数据可以在任一键中,则检查两次,一旦通过KEY_WOW64_32KEY
并再次经过KEY_WOW64_64KEY
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)