c++ - RegOpenKeyEx 访问拒绝读取 HKEY_LOCAL_MACHINE

标签 c++ permissions uac visual-c++-2010

在 Windows 7(32 位)中,如果我不是在管理员模式下运行,当我在 HKEY_LOCAL_MACHINE 上调用::RegOpenKeyEx 时,我总是会收到错误 5(访问被拒绝)。

这是我的代码:

result = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\MyCompany\\MyApp"), 0, KEY_QUERY_VALUE, &keySoftware)

我正在尝试构建一个可以为整台机器而不是特定用户安装的应用程序。因此我的安装程序(在管理员模式下运行)写入 HKEY_LOCAL_MACHINE,并且安装程序工作正常。

我希望我的应用程序能够读取我的安装程序已放入注册表中的数据。我不想更改任何注册表数据。我也尝试过使用 KEY_READ 和 KEY_EXECUTE 而不是 KEY_QUERY_VALUE。但似乎无论我做什么,我都无法在不使用提升状态的情况下从 HKEY_LOCAL_MACHINE 读取数据。我在这里缺少什么?

最佳答案

您的安装程序需要调整注册表项的安全权限,以便允许非管理员用户访问它。看看RegSetKeySecurity() ,或您的安装程序的等效工具,或任何数量的可用命令行工具。您可以创建一个 DACL,为 Everyone 用户组或特定用户帐户启用只读访问权限。

更新:由于您使用的是 Inno Setup,请在您的注册表设置中尝试此操作:

[Registry]
Root: HKLM; Subkey: "Software\MyCompany\MyApp"; Permissions: everyone-read

或者:

[Registry]
Root: HKLM; Subkey: "Software\MyCompany\MyApp"; Permissions: users-read

关于c++ - RegOpenKeyEx 访问拒绝读取 HKEY_LOCAL_MACHINE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23942176/

相关文章:

c++ - 为什么此 vector vector 超出范围?

google-apps-script - Google 应用脚本错误 : You do not have permission to call getActiveForm?

google-apps-script - 使用脚本复制谷歌工作表,同时保留 protected 工作表的权限

c# - 如何设计在 Windows Vista/7 上以管理员身份运行的自动启动应用程序?

vba - 在 Windows 7 中保存 Excel 加载项

C++ 模板类型检查

c++ - 我应该用 emplace_back 替换所有对 push_back 的调用吗?

c++ - 交替排序数组的最简单方法是什么(例如 :T, T,F,F,F,T,F,T,F,F,F 到 T,F,T,F,T,F,T,F,T,T ,T)?

java - 创建权限插件 (aplugin.*) - Spigot/Bukkit - Java

winapi - 需要管理权限的 Win32 API 列表