我有一个 C++ 应用程序,我们在其中将设置写入注册表(在我的应用程序的 HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE 下)。当 Windows 用户访问控制设置为始终通知时,RegCreateKeyEx 方法返回访问被拒绝并且它不会写入 HKEY_LOCAL_MACHINE但它在 HKEY_CURRENT_USER 注册表中成功写入。 我正在使用这种方法来写:
lRet = RegCreateKeyEx( m_hSWRootKey, LPCTSTR(strKey),
0, _T(""), m_dwCreationFlag, KEY_WRITE | KEY_READ,
NULL, &hKey, &Disposition );
当 UAC 设置为从不通知时,此方法工作正常。
为什么不写入HKEY_LOCAL_MACHINE? 我如何覆盖 Windows UAC 设置,以便在设置为“始终通知”时能够写入?
请提出建议。
最佳答案
除非您拥有管理员权限,否则您无法写入 HKEY_LOCAL_MACHINE
。对于基于 NT 的 Windows 版本,情况一直如此。 UAC 的变化是管理员用户默认使用标准用户 token 运行,并且仅提升以获得需要提升权限的操作的管理权限。
你有两个选择:
- 找到一种无需写入
HKEY_LOCAL_MACHINE
即可实现目标的方法。 - 要求用户获得写入
HKEY_LOCAL_MACHINE
的应用部分的管理员权限。
在这些选项中,第一个是迄今为止首选的。
关于c++ - Windows UAC 设置为始终通知时无法写入注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6016094/