文章編號: 842795 - 上次校閱: 2006年11月9日 - 版次: 3.3

嘗試建立自訂的事件記錄檔時,收到「不允許要求的登錄使用權」錯誤訊息

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

重要 本文包含如何修改登錄的相關資訊。修改登錄之前,請務必備份登錄。同時了解如何在發生問題時還原登錄。如需有關如何備份、還原及修改登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
256986? (http://support.microsoft.com/kb/256986/ ) Microsoft Windows 登錄說明

在此頁中

全部展開 | 全部摺疊

徵狀

如果您以一般使用者身分登入電腦,而且嘗試使用 Microsoft Visual Studio .NET 建立自訂的事件記錄檔以登錄事件,則可能會收到下列錯誤訊息:
類型 'System.Security.SecurityException' 的未處理例外狀況發生於 mscorlib.dll
其他資訊:不允許要求的登錄使用權。

發生的原因

這個問題起因於您用以登入的使用者帳戶權限不足。

第一次呼叫 EventLog.CreateEventSource() 方法建立自訂事件記錄檔時,已於下列登錄子機碼下建立自訂的事件記錄檔項目:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
您必須具有寫入權限,才能建立此子機碼項目。但是,一般使用者帳戶沒有寫入權限。因此您才會收到<徵狀>一節所描述的錯誤訊息。

其他可行方案

警告 如果您使用「登錄編輯程式」或其他方法不當地修改登錄,可能會發生嚴重問題。您可能需要重新安裝作業系統,才能解決這些問題。Microsoft 不保證可以解決這些問題。請自行承擔修改登錄的一切風險。
如果要解決這個問題,請使用下列其中一種方法:
  • 授與建立自訂事件記錄檔的權限
  • 以系統管理員身分安裝自訂事件記錄檔

授與建立自訂事件記錄檔的權限

  1. 請以系統管理員的身分登入電腦。
  2. 按一下 [開始],再按一下 [執行],並在 [開啟] 方塊中輸入 regedit,然後按一下 [確定]。[登錄編輯程式] 視窗會隨即出現。
  3. 找出下列登錄子機碼:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
  4. 用滑鼠右鍵按一下 [Eventlog],再按 [使用權限][Eventlog 的使用權限] 對話方塊會隨即出現。
  5. 按一下 [進階][Eventlog 的進階安全性設定] 對話方塊會隨即出現。
  6. 按兩下 [名稱] 欄的 [Users] 群組。[Eventlog 的權限項目] 對話方塊會隨即出現。
  7. 選取 [設定數值][建立子機碼] 核取方塊,然後按一下 [確定]
  8. 結束 [登錄編輯程式] 並登出系統管理員帳戶。
  9. 以一般使用者的身分登入電腦。
  10. 嘗試使用 Visual Studio .NET 建立自訂事件記錄檔,然後再嘗試使用建立於 Visual Studio .NET 的應用程式,寫入此事件記錄檔。

以系統管理員身分安裝自訂事件記錄檔

  1. 請以系統管理員的身分登入電腦。
  2. 使用 Visual Studio .NET 的 CreateEventSource 方法,建立自訂事件記錄檔及事件記錄來源。
  3. 登出系統管理員帳戶。
  4. 以一般使用者的身分登入電腦。
  5. 執行應用程式以將項目寫入自訂事件記錄檔。

其他相關資訊

重現問題的步驟

  1. 建立一般使用者帳戶:
    1. 請以系統管理員的身分登入電腦。
    2. 用滑鼠右鍵按一下 [我的電腦],然後按一下 [管理]。[電腦管理] 視窗會隨即出現。
    3. [系統工具] 下,展開 [本機使用者和群組]
    4. 用滑鼠右鍵按一下 [使用者],然後按一下 [新增使用者][新增使用者] 對話方塊會隨即出現。
    5. [使用者名稱] 方塊中輸入新帳戶的名稱,再於 [密碼][確認密碼] 兩個方塊中輸入相同的密碼。
    6. 清除 [使用者下次登入時須變更密碼] 核取方塊、選取 [密碼永遠不會到期] 核取方塊,然後按一下 [建立]
    7. 按一下 [關閉] 關閉 [新增使用者] 對話方塊。
  2. 新增使用者到 Debugger User 群組:
    1. 按一下 [本機使用者和群組] 下的 [使用者]
    2. 在 [電腦管理] 視窗右窗格的 [名稱] 欄中,用滑鼠右鍵按一下新帳戶名稱,再按 [內容]。新帳戶的 [內容] 對話方塊會隨即出現。
    3. 按一下 [成員隸屬] 索引標籤,再按 [新增][選取群組] 對話方塊會隨即出現。
    4. 按一下 [進階][選取群組] 對話方塊會隨即出現。
    5. 按一下 [立即尋找]。可用的群組會隨即出現在 [選取群組] 對話方塊中。
    6. 按一下 [名稱 (RDN)] 欄的 [Debugger Users],再按 [確定]
    7. [選擇群組] 對話方塊中,按一下 [確定]
    8. 在新帳戶的 [內容] 對話方塊中,按一下 [確定]
    9. 登出系統管理員帳戶。
  3. 建立 Windows 應用程式:
    1. 使用您在<步驟 1 - 建立一般使用者帳戶>中建立的一般使用者帳戶登入電腦。
    2. 啟動 Visual Studio .NET。
    3. [檔案] 功能表上,指向 [新增],然後按一下 [專案][新增專案] 對話方塊會隨即出現。
    4. [專案類型] 下,按一下 [Visual C# 專案]
    5. [範本] 下,按一下 [Windows 應用程式]
    6. [名稱] 方塊中,輸入專案名稱,然後按一下 [確定]。預設會出現 Form1 表單。
    7. 用滑鼠右鍵按一下 Form1 表單,再按 [檢視程式碼]。Form1.cs 檔案會隨即出現。
    8. 以下列程式碼取代現有的程式碼:
      using System;
      using System.Drawing;
      using System.Collections;
      using System.ComponentModel;
      using System.Windows.Forms;
      using System.Data;
      using System.Diagnostics;
      
      namespace WindowsApplication1
      {
      	/// <summary>
      	/// Summary description for Form1.
      	/// </summary>
      	public class Form1 : System.Windows.Forms.Form
      	{
      		private System.Diagnostics.EventLog eventLog1;
      		private System.Windows.Forms.Button button1;
      		/// <summary>
      		/// Required designer variable.
      		/// </summary>
      		private System.ComponentModel.Container components = null;
      
      	
      
      
      		public Form1()
      		{
      			//
      			// Required for Windows Form Designer support
      			//
      			InitializeComponent();
      
      			if(!EventLog.SourceExists("Source1"))
      			{
      				EventLog.CreateEventSource("Source1","MyLog1");
      			}
      			eventLog1.Source = "Source1";
      			eventLog1.Log = "MyLog1";
      			//
      			// TODO: Add any constructor code after InitializeComponent call
      			//
      		}
      		
      		
      		
      		
      		/// <summary>
      		/// Clean up any resources being used.
      		/// </summary>
      		protected override void Dispose( bool disposing )
      		{
      			if( disposing )
      			{
      				if (components != null) 
      				{
      					components.Dispose();
      				}
      			}
      			base.Dispose( disposing );
      		}
      
      		#region Windows Form Designer generated code
      		/// <summary>
      		/// Required method for Designer support - do not modify
      		/// the contents of this method with the code editor.
      		/// </summary>
      		private void InitializeComponent()
      		{
      			this.eventLog1 = new System.Diagnostics.EventLog();
      			this.button1 = new System.Windows.Forms.Button();
      			((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
      			this.SuspendLayout();
      			// 
      			// eventLog1
      			// 
      			this.eventLog1.SynchronizingObject = this;
      			// 
      			// button1
      			// 
      			this.button1.Location = new System.Drawing.Point(104, 104);
      			this.button1.Name = "button1";
      			this.button1.TabIndex = 0;
      			this.button1.Text = "button1";
      			this.button1.Click += new System.EventHandler(this.button1_Click);
      			// 
      			// Form1
      			// 
      			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      			this.ClientSize = new System.Drawing.Size(292, 273);
      			this.Controls.Add(this.button1);
      			this.Name = "Form1";
      			this.Text = "Form1";
      			((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();
      			this.ResumeLayout(false);
      
      		}
      		#endregion
      
      		/// <summary>
      		/// The main entry point for the application.
      		/// </summary>
      		[STAThread]
      		static void Main() 
      		{
      			Application.Run(new Form1());
      		}
      		
      		private void button1_Click(object sender, System.EventArgs e)
      		{
      			eventLog1.WriteEntry("The Button1 Is Clicked");
      		}
      	}
      }
      
    9. [檔案] 功能表上,按一下 [儲存 Form1.cs] 儲存檔案。
  4. 執行專案:
    1. [建置] 功能表上,按一下 [建置方案]
    2. 執行專案。您會收到<徵狀>一節所描述的錯誤訊息。
注意 寫入事件記錄登錄子機碼權限的安全性,會以作業系統的事件日誌記錄 API 層級強制執行。自訂事件記錄檔的權限預設與應用程式事件記錄檔的權限相同。

?考

如需詳細資訊,請造訪下列 Microsoft Developer Network (MSDN) 網站:
建立及移除自訂事件記錄檔
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskcreatingremovingcustomlogseventsources.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskcreatingremovingcustomlogseventsources.asp)

寫入 項目至事件記錄檔
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskWritingEntriesToEventLogs.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskWritingEntriesToEventLogs.asp)

將應用程式新增為事件記錄項目的來源
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskaddingyourapplicationassourceofeventlogentries.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskaddingyourapplicationassourceofeventlogentries.asp)

事件記錄安全性
http://windowssdk.msdn.microsoft.com/zh-tw/library/ms684080.aspx (http://windowssdk.msdn.microsoft.com/zh-tw/library/ms684080.aspx)
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
329291? (http://support.microsoft.com/kb/329291/ ) PRB: "Requested Registry Access Is Not Allowed" Error Message When ASP.NET Application Tries to Write New EventSource in the EventLog

這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
關鍵字:?
kbtshoot kberrmsg kbregistry kbpermissions kbeventlog kbaccounts kbprb KB842795
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。