c++ - RegOpenKeyEx 找不到注册表项

标签 c++ windows registry

我的程序应该枚举已安装的 OPOS 设备。它们列在注册表中,所以我使用 RegOpenKeyEx 如下:

LONG lResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\OLEforRetail\\ServiceOPOS\\PosPrinter"), 0, KEY_READ , &key );

它在我的电脑上运行良好,但在另一台机器(windows 7 sp1 32 位)上表现非常奇怪。

我有两个几乎相同的测试项目(都是 mfc 对话框应用程序,主要区别是一个是用 visual studio 2005 创建的,另一个是 2010 年创建的)。在其中一个项目中,上面的代码工作正常,在另一个 RegOpenKeyEx 中返回 ERROR_FILE_NOT_FOUND。此外,无法使用 regedit.exe 找到该 key 。

这里到底发生了什么?

最佳答案

Also, that key can not be found with regedit.exe.

好吧,您需要确保以正确的位数访问注册表。在 64 位操作系统上,“regedit.exe”将打开 64 位 View ,而不是 32 位 View 。您需要使用 Windows\syswow64\regedit.exe 打开 32 位 View 。

You cannot open both 32-bit as well as 64-bit regedit.exe, at the same time.

对于您的程序,您需要检查它是 32 位还是 64 位。您还需要检查您是否已获得许可(检查链接器中的 UAcflags)。

完成所有操作后,您可以继续启用或禁用注册表重定向,以便 32 位进程可以访问 64 位注册表,或者 64 位进程可以打开 32 位注册 TableView 。

关于c++ - RegOpenKeyEx 找不到注册表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36010956/

相关文章:

ruby - 用ruby查询windows上已安装的软件

c++ - SIMD 内部函数和指针

windows - Windows 10 的 "task scheduler"存储日志文件在哪里?

python - 有没有办法从 Windows 单击调用 python?

internet-explorer - 如何让 IE 页面请求存活超过 1 分钟?

windows - 在 Windows 的注册表编辑器中递归创建 key

C++ ofstream : Always write onthe 1st line

c++ - vector 乘法中的 SIMD 与 OMP

c++ - C++中的引用和析构函数

c# - 如何在 C# 中创建 COM(和其他设备)模拟器?