我正在尝试从注册表项中获取值,并且最终的程序必须同时适用于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 return ERROR_FILE_NOT_FOUND on keys that exist,如果它是'64位操作系统上的'32位代码'它将无效,但我不明白是什么这意味着。
是否必须为不同的体系结构编译程序,还是特定于32位的RegGetValue?
很抱歉,我的大部分C ++编程都是在64位计算机成为主流之前完成的,而且我写过的偶然项目都没有出现过这个问题。
答案 0 :(得分:2)
在64位Windows上有两个注册表视图,32位视图和64位视图。这在MSDN上标题为Accessing an Alternate Registry View。
的主题中有所描述默认情况下,32位进程将从32位视图读取,64位进程将从64位视图读取。如果您希望从特定视图中读取,则无论过程的体系结构如何,您都需要提供以下标志之一:KEY_WOW64_64KEY
或KEY_WOW64_32KEY
。
因此,如果您需要的数据位于32位视图中,请传递KEY_WOW64_32KEY
。如果数据在64位视图中传递KEY_WOW64_64KEY
。如果数据可以在任一键中,请检查两次,一次通过KEY_WOW64_32KEY
并再次通过KEY_WOW64_64KEY
。