RegOpenKeyEx找不到注册表项

时间:2016-03-15 12:09:47

标签: c++ windows registry

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

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

它在我的计算机上工作正常但在另一台机器上表现得非常奇怪(Windows 7 sp1 32bit)。

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

这里甚至发生了什么?

1 个答案:

答案 0 :(得分:1)

  

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

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

  

您无法同时打开32位和64位 regedit.exe

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

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