RegOpenKeyEx 找不到注册表项

RegOpenKeyEx can't find registry key

本文关键字:注册表 找不到 RegOpenKeyEx      更新时间:2023-10-16

我的程序应该枚举已安装的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 找到。

这里到底发生了什么?

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

好吧,您需要确保以正确的位访问注册表。在 64 位操作系统上,"regedit.exe"将打开 64 位视图,而不是 32 位视图。您需要使用 Windowssyswow64regedit.exe 打开 32 位视图。

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

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

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