我有一个32位程序,它在同一个商店的两个通道中运行。该程序尝试顶部打开一个注册表项进行查询。操作系统是Windows 8.1 64位。
在一个通道上它成功,另一个通道失败并且regopenkeyex返回2. GetLastError返回0.
它尝试打开的密钥位于WOW6432Node。
程序在两台计算机上的同一Windows用户下运行,两者都存在密钥。 UAC设置为"从不通知" (最低),windows版本是一样的。一切都应该是一样的......
我故意不指定KEY_WOW64_64KEY,因为代码应该在没有它的情况下工作。但即使我使用它,我也会得到相同的结果。
可能导致这种情况的原因是什么?
代码:
rc = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
szKey,
0,
KEY_QUERY_VALUE,
&m_hKey);
谢谢。
答案 0 :(得分:0)
您实际上需要了解您在MSDN上使用的功能。注册表函数直接返回错误代码,它们不使用GetLastError
!
2是ERROR_FILE_NOT_FOUND
,因此您在szKey
中隐藏的任何内容都不是有效的子项路径。
WOW6432Node是您不应该使用的保留键名,如果需要在64位应用程序中访问32位注册表视图,请使用KEY_WOW64_32KEY
。默认情况下,32位应用程序会读取WOW6432Node键下的键。
使用Process Monitor确保您访问的是正确的密钥。