我正在拨打以下电话:
result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);
(C++、Visual Studio 5、Vista 64 位)。
即使“ regedit
”显示密钥存在,它也会失败,错误代码为 2(“找不到文件”)。此代码一直适用于 32 位 XP。为什么它明显存在时“找不到文件”?
我正在拨打以下电话:
result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);
(C++、Visual Studio 5、Vista 64 位)。
即使“ regedit
”显示密钥存在,它也会失败,错误代码为 2(“找不到文件”)。此代码一直适用于 32 位 XP。为什么它明显存在时“找不到文件”?
我发现我可以使用 flag: 来解决我的问题 KEY_WOW64_64KEY
,例如:
result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);
在 Windows 64 位系统上,注册表实际上分为两部分。一部分由 64 位进程使用,一部分由 32 位进程使用。
例如,如果 32 位应用程序以编程方式写入它认为是 HKLM\SOFTWARE\Company\Application,它实际上被 WoW64 层重定向到 HKLM\SOFTWARE\Wow6432Node\Company\Application。
因此,当您运行 32 位应用程序并调用 RegOpenKeyEx 时,它实际上是针对 Wow6432Node\ 文件夹而不是常规的 \SOFTWARE 节点工作的。
您必须使用“使用多字节字符集”进行编译或将代码中的字符串转换为(LPWSTR)
我有一个类似的问题。我正在使用:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
(LPWSTR)"SOFTWARE\\0test",
0,
WRITE_DAC ,
&hKey);
那没有用。我像这样尝试过,它奏效了:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\0test"),
0,
WRITE_DAC ,
&hKey);
是的,win7 64B,再添加标志KEY_WOW64_64KEY,就可以了。如果不起作用,请参阅http://msdn.microsoft.com/en-us/library/ms724897(v=VS.85).aspx