C++ RegOpenKeyEx可以';找不到注册表项

C++ RegOpenKeyEx可以';找不到注册表项,c++,windows,registry,C++,Windows,Registry,我的程序应该枚举已安装的OPOS设备。它们列在注册表中,因此我使用RegOpenKeyEx如下: LONG lResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\OLEforRetail\\ServiceOPOS\\PosPrinter"), 0, KEY_READ , &key ); 它在我的电脑上工作正常,但在另一台电脑(Windows7SP1 32位)上的表现非常奇怪 我有两个几乎相同的测试项目(都是mfc对话应用程序

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

LONG lResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\OLEforRetail\\ServiceOPOS\\PosPrinter"), 0, KEY_READ , &key );
它在我的电脑上工作正常,但在另一台电脑(Windows7SP1 32位)上的表现非常奇怪

我有两个几乎相同的测试项目(都是mfc对话应用程序,主要区别在于一个是用VisualStudio2005创建的,另一个是在2010年创建的)。在其中一个项目中,上面的代码可以正常工作,在另一个项目中,
RegOpenKeyEx
返回
ERROR\u FILE\u NOT\u FOUND
。此外,无法使用regedit.exe找到该密钥

这里到底发生了什么

此外,无法使用regedit.exe找到该密钥

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

不能同时打开32位和64位的regedit.exe

对于您的程序,您需要检查它是32位还是64位。您还需要检查是否已获得该权限(检查链接器中的UAC标志)


一旦您了解了所有内容,您可以继续启用或禁用注册表重定向,这样32位进程就可以访问64位注册表,或者64位进程就可以打开32位注册表视图。

问题是,它不工作的机器是32位机器,所以我不认为是问题所在。这可能是问题吗?另一方面,如果regedit和您的程序找不到该键,可能是因为该键不存在。