【发布时间】:2015-10-30 09:05:15
【问题描述】:
我需要从我的应用程序中读取 HKEY_LOCAL_MACHINE\SOFTWARE 中的键值。我使用以下 sn-p 来执行此操作,但它总是返回 2。
std::wstring strTmp;
strTmp = L"SOFTWARE\\TEMP";
RegOpenKeyExW(HKEY_LOCAL_MACHINE, strTmp.c_str(), 0, KEY_READ, &hKey))
但是当我使用HKEY_CURRENT_USER 时,我能够成功地从HKEY_CURRENT_USER\SOFTWARE 读取信息。我了解由于访问权限,我的应用程序无法从 HKEY_LOCAL_MACHINE 读取。我确实以管理员权限(使用运行方式)运行了我的应用程序,但这并没有帮助我。
有人可以说明如何使用RegOpenKeyExW 访问HKEY_LOCAL_MACHINE。
【问题讨论】:
-
Windows 错误代码 2 是 ERROR_FILE_NOT_FOUND。您确定您的注册表项存在吗?
-
您的代码似乎也缺少一个打开标志。使用 KEY_WOW64_64KEY 访问 64 位视图或使用 KEY_WOW64_32KEY 访问 32 位视图(即 Wow6432Node 下的键)。
-
@ Mohamad Elghawi 是的,注册表项存在。但它仍然返回 2。我还使用 Procmon 监视了注册表路径,它在进行此调用时显示正确的路径,但 windows 说找不到文件。另外,正如您所建议的,我曾尝试将标志 KEY_WOW64_64KEY 与 KEY_READ 结合使用,但没有运气。
-
我从technet.microsoft.com/en-us/sysinternals/bb896645下载了procmon。
-
密钥的完整路径是什么。是 HKEY_LOCAL_MACHINE\SOFTWARE\TEMP 还是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Temp?
标签: c++ registry windows-7-x64 windows-7-embedded