2011-05-16 46 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的應用程序部分的管理員權限。

在這些選項中,第一個是迄今爲止的首選。