天天看點

Requested registry access is not allowed

Requested registry access is not allowed(不允許所請求的系統資料庫通路權)

今天在寫一個Service程式時候遇到這個問題,因為在家裡電腦上沒有問題的(XP),不成想在公司的Win7上居然出現這個問題,猜測應該是Win7的權限管理問題。

問題出現在如下建立一個EventLog的代碼中,

  1. public void LogEvent(String Message, EventLogEntryType type) 
  2.     string source = "DemoSource"; 
  3.     if (!EventLog.SourceExists(source)) 
  4.     { 
  5.         EventLog.CreateEventSource(source, "DemoLog"); 
  6.     } 
  7.     _log = new EventLog(); 
  8.     _log.Source = source; 
  9.     LogEvent(Message, type); 
  10.  } 

因為是使用VS調試的,就想還是用管理者權限來跑一下試試(i.e. Run as administrator),結果果然很靈光,順利通過。

然後去谷哥上Search一下:

EventLog.CreateEventSource()

如果以普通使用者身份登入計算機,并嘗試使用 Microsoft Visual Studio .NET 建立自定義事件日志以注冊事件,可能會收到以下錯誤消息:

An unhandled exception of type 'System.Security.SecurityException' occurred in mscorlib.dll

Additional information:Requested registry access is not allowed.

出現此問題的原因在于登入所用的使用者帳戶沒有足夠的權限。

首次調用

方法建立自定義事件日志時,将會在下面的系統資料庫子項下建立自定義事件日志條目:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog

要建立此子項條目,必須擁有寫權限。但是,普通使用者帳戶沒有寫權限。是以,會收到“症狀”部分中提到的錯誤消息。

警告

:如果使用系統資料庫編輯器或其他方法錯誤地修改了系統資料庫,則可能導緻嚴重問題。這些問題可能需要重新安裝作業系統才能解決。Microsoft 不能保證可以解決這些問題。修改系統資料庫需要您自擔風險。

要解決此問題,請使用下列方法之一:

  • 授予建立自定義事件日志的權限
  • 以管理者身份安裝自定義事件日志
  1. 以管理者身份登入計算機。
  2. 依次單擊“開始”和“運作”,在“打開”框中鍵入 regedit,然後單擊“确定”。這将打開“系統資料庫編輯器”視窗。
  3. 找到以下系統資料庫子項:
  4. 右鍵單擊“Eventlog”,然後單擊“權限”。這将顯示“Eventlog 的權限”對話框。
  5. 單擊“進階”。此時顯示“Eventlog 的進階安全設定”對話框。
  6. 在“名稱”列中,輕按兩下“Users”組。這将顯示“Eventlog 的權限項目”對話框。
  7. 依次選中“設定數值”和“建立子項”複選框,然後單擊“确定”。
  8. 退出系統資料庫編輯器,然後從管理者帳戶中登出。
  9. 以普通使用者身份登入計算機。
  10. 嘗試使用 Visual Studio .NET 建立自定義事件日志,然後嘗試使用基于 Visual Studio .NET 建構的應用程式寫入此事件日志。
  1. 使用 Visual Studio .NET 中的 CreateEventSource 方法建立自定義事件日志和事件日志源。
  2. 從管理者帳戶登出。
  3. 通過運作應用程式将條目寫入自定義事件日志。

繼續閱讀