2011-05-16 139 views
1

我有一个C++应用程序,在其中我们将设置写入注册表(在我的应用程序的HKEY_CURRENT_USER & HKEY_LOCAL_MACHINE下)。当windows User Access Control设置为Always Notify ,RegCreateKeyEx方法返回访问被拒绝,并且不写入HKEY_LOCAL_MACHINE,但它成功写入HKEY_CURRENT_USER注册表中。 我使用这个方法来写:当Windows UAC设置为始终通知时,无法在注册表中写入

lRet = RegCreateKeyEx(m_hSWRootKey, LPCTSTR(strKey), 
0, _T(""), m_dwCreationFlag, KEY_WRITE | KEY_READ, 
NULL, &hKey, &Disposition); 

此方法时UAC设置为从不通知罚款。

它不写入HKEY_LOCAL_MACHINE的原因是什么? 我怎样才能覆盖Windows UAC设置,所以我将能够写时,它被设置为始终通知?

请建议。

回答

0

如果你走的道路,只允许应用程序运行作为管理员,您可以设置清单在Visual Studio:

工程>>属性>>配置属性>>链接>>清单文件>> UAC执行级别。

理想情况下,你会找到一些方式,不需要修改HKEY_LOCAL_MACHINE

+0

我试图同时使用UAC执行水平和启用用户帐户(UAC)清单的选项,但仍是其不书写时UAC设置为始终通知到HKEY_LOCAL_MACHINE 。 – Nikhil 2011-05-16 12:28:03

+0

你在写什么在HKLM? – 2011-05-16 13:25:23

+0

我正在写HKLM \ Software \ MyApplication – Nikhil 2011-05-17 05:48:26

4

除非拥有管理员权限,否则不能写信给HKEY_LOCAL_MACHINE。对于基于NT的Windows版本,情况一直如此。 UAC的变化在于管理员用户默认使用标准用户令牌运行,并且仅提升获得需要提升权限的操作的管理员权限。

你有两个选择:

  1. 找到一种方法来实现自己的目标,而无需编写到HKEY_LOCAL_MACHINE
  2. 要求用户获取写入HKEY_LOCAL_MACHINE的应用程序部分的管理员权限。

在这些选项中,第一个是迄今为止的首选。

相关问题