当前位置:  开发笔记 > 编程语言 > 正文

为什么RegOpenKeyEx()在Vista 64bit上返回错误代码2?

如何解决《为什么RegOpenKeyEx()在Vista64bit上返回错误代码2?》经验,为你挑选了2个好方法。

我正在拨打以下电话:

result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);

(C++,Visual Studio 5,Vista 64bit).

它失败了,错误代码2("找不到文件"),即使" regedit"表示密钥存在.这段代码一直在32位XP上运行.当它显然存在时,为什么它"找不到文件"?



1> Tim Cooper..:

我发现我可以使用标志解决我的问题: KEY_WOW64_64KEY ,如:

result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);

有关完整说明:注册表中的32位和64位应用程序数据



2> Frode Liller..:

在Windows 64位系统上,注册表实际上分为两部分.一个部分由64位进程使用,一部分由32位进程使用.

例如,如果32位应用程序以编程方式写入其认为是HKLM\SOFTWARE\Company\Application的内容,则它实际上由WoW64层重定向到HKLM\SOFTWARE\Wow6432Node\Company\Application.

因此,当您运行32位应用程序并调用RegOpenKeyEx时,它实际上是针对Wow6432Node \文件夹而不是常规\ SOFTWARE节点.


请注意,您不应该依赖名为"Wow6432Node"的密钥.使用"RegOpenKeyEx"的标志来访问其他注册表视图.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有