我的程序应该枚举已安装的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无法找到该密钥。
这里甚至发生了什么?
答案 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位注册表视图。