2016-03-15 152 views
0

我的程序应该枚举已安装的OPOS设备。它们在注册表中列出所以我用RegOpenKeyEx这样的: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中找到。

这里甚至发生了什么?

+0

它可能是[注册表虚拟化](https://msdn.microsoft.com/en-us/library/windows/desktop/aa965884(v = vs.85).aspx)问题?另一方面,如果注册表__和___你的程序找不到密钥,可能是因为密钥不存在。 –

回答

1

此外,该键不能用regedit.exe找到。

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

无法打开32位以及64位REGEDIT.EXE,在同一时间。

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

一旦你掌握了这一切,就可以继续启用或禁用注册表重定向,以便32位进程可以访问64位注册表,或者64位可以打开32位注册表视图。

+0

根据问题,它无法工作的机器是32位机器,所以我不认为是问题所在。 –