PRB: ASP.NET 응용 프로그램이 이벤트 로그에 새로운 EventSource를 쓰려고 하면 "요청한 레지스트리에 액세스할 수 없습니다" 오류 메시지 발생

기술 자료 번역 기술 자료 번역
기술 자료: 329291 - 이 문서가 적용되는 제품 보기.
중요: 이 문서에서는 레지스트리 수정 방법을 설명합니다. 레지스트리를 수정하기 전에 해당 레지스트리를 백업하고 문제 발생 시 이를 복원하는 방법을 이해해야 합니다. 레지스트리 백업, 복원 및 편집 방법은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
256986 Microsoft Windows 레지스트리 설명
모두 확대 | 모두 축소

이 페이지에서

현상

ASP.NET을 사용하여 이벤트 로그에 새로운 이벤트 원본을 만들려고 하면 다음 오류 메시지가 나타날 수 있습니다.
System.Security.SecurityException: 요청한 레지스트리에 액세스할 수 없습니다.

원인

기본적으로 ASP.NET 작업자 프로세스의 사용자 토큰은 ASPNET(또는 인터넷 정보 서비스[IIS] 6.0에서 실행되는 응용 프로그램의 경우 NetworkService)입니다. "현상" 절의 문제는 사용자 계정이 이벤트 원본을 만들기 위한 올바른 사용자 권한을 갖고 있지 않기 때문에 발생합니다.

해결 방법

경고: 레지스트리 편집기를 잘못 사용하면 심각한 문제가 발생할 수 있으며 문제를 해결하기 위해 운영 체제를 다시 설치해야 할 수도 있습니다. Microsoft는 레지스트리 편집기를 잘못 사용함으로써 발생하는 문제에 대해 해결을 보증하지 않습니다. 레지스트리 편집기의 사용에 따른 모든 책임은 사용자에게 있습니다. 이 문제를 해결하려면 관리자 권한이 있는 사용자가 ASP.NET 웹 응용 프로그램을 실행하기 전에 이벤트 원본을 만들어야 합니다. 이벤트 원본을 만들려면 다음 방법 중 하나를 사용하십시오.

첫 번째 방법

레지스트리 편집기의 Application 이벤트 로그 아래에 이벤트 원본을 만듭니다. 이렇게 하려면 다음과 같이 수행하십시오.
  1. 시작을 누르고 실행을 누릅니다.
  2. 열기 입력란에 regedit를 입력합니다.
  3. 다음 레지스트리 하위 키를 찾습니다.
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. Application 하위 키를 마우스 오른쪽 단추로 누른 다음 새로 만들기를 가리킨 다음 를 누릅니다.
  5. 키 이름으로 TEST를 입력합니다.
  6. 레지스트리 편집기를 닫습니다.

두 번째 방법

System.Diagnostics 네임스페이스의 EventLogInstaller 클래스를 사용하면 응용 프로그램이 실행되는 동안 읽거나 쓰는 이벤트 로그를 설치하고 구성할 수 있습니다. EventLogInstaller를 사용하여 이벤트 원본을 만들 수 있습니다. 이렇게 하려면 다음과 같이 수행하십시오.
  1. Microsoft Visual Basic .NET 또는 Microsoft Visual C# .NET을 사용하여 EventLogSourceInstaller라는 새로운 클래스 라이브러리를 만듭니다. 기본적으로 Class1.vb 파일이나 Class1.cs 파일이 만들어집니다.
  2. 솔루션 탐색기에서 EventLogSourceInstaller를 마우스 오른쪽 단추로 누른 다음 참조 추가를 누릅니다.
  3. 참조 추가 대화 상자에서 System.Configuration.Install.dll을 두 번 누른 다음 확인을 누릅니다.
  4. Class1.vb\Class1.cs를 MyEventLogInstaller.vb\MyEventLogInstaller.cs로 이름을 바꿉니다.
  5. MyEventLogInstaller.vb 또는 MyEventLogInstaller.cs의 기존 코드를 다음 예제 코드로 바꿉니다.

    Visual Basic .NET 예제
    Imports System.Diagnostics
    Imports System.Configuration.Install
    Imports System.ComponentModel
    
    <RunInstaller(True)> _
    Public Class MyEventLogInstaller
        Inherits Installer
        Private myEventLogInstaller As EventLogInstaller
    
        Public Sub New()
            ' Create an instance of 'EventLogInstaller'.
            myEventLogInstaller = New EventLogInstaller()
            ' Set the 'Source' of the event log, to be created.
            myEventLogInstaller.Source = "TEST"
            ' Set the 'Log' that the source is created in.
            myEventLogInstaller.Log = "Application"
            ' Add myEventLogInstaller to 'InstallerCollection'.
            Installers.Add(myEventLogInstaller)
        End Sub 
    End Class 
    
    Visual C# .NET 예제
    using System;
    using System.Diagnostics;
    using System.ComponentModel;
    using System.Configuration.Install;
    
    
    namespace EventLogSourceInstaller 
    {
    	[RunInstaller(true)]
    	public class MyEventLogInstaller : Installer
    	{
    		private EventLogInstaller myEventLogInstaller;
    
    		public MyEventLogInstaller()
    		{
    			//Create Instance of EventLogInstaller
    			myEventLogInstaller = new EventLogInstaller();
    
    			// Set the Source of Event Log, to be created.
    			myEventLogInstaller.Source = "TEST";
    
    			// Set the Log that source is created in
    			myEventLogInstaller.Log = "Application";
    						// Add myEventLogInstaller to the Installers Collection.
    			Installers.Add(myEventLogInstaller);
    		}
    	}
    }
    
    
  6. 빌드 메뉴에서 솔루션 빌드를 눌러 EventLogSourceInstaller.dll을 만듭니다.
  7. Visual Studio .NET 명령 프롬프트를 엽니다.
  8. 명령 프롬프트에서 EventLogSourceInstaller.dll이 있는 폴더로 변경합니다.
  9. 다음 명령을 실행하여 아래 EventSource를 만듭니다.
    InstallUtil EventLogSourceInstaller.dll

추가 정보

문제를 재현하는 방법

  1. Visual Basic .NET 또는 Visual C# .NET을 사용하여 새로운 ASP.NET 웹 응용 프로그램을 만듭니다. 기본적으로 WebForm1.aspx 파일이 만들어집니다.
  2. WebForm1.aspx의 HTML 보기에서 기존 코드를 다음 예제 코드로 바꿉니다.

    Visual Basic .NET 예제
    <%@ Page Language="vb" AutoEventWireup="true" %>
    <%@ Import namespace="System.Diagnostics" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    	<script language="VB" runat="server">
    	Sub WriteEvent_Click(Src As Object, e As EventArgs)
    	Dim ev As New EventLog("Application")
    	' Event's Source name
    	ev.Source = "TEST" 
    		EventLog.CreateEventSource(ev.Source, "Application")
    	Try
    	 ev.WriteEntry(TextBox1.Text)
    	Catch b as exception
    	 Response.write ("WriteEntry " & b.message & "<br>")
    	End Try
    	ev = Nothing
    	End Sub
    	</script>
    
    	<body>
    		<form id="Form1" runat="server">
    			Event message: 
    			<asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>
    			<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Write to event log"></asp:button>
    		</form>
    	</body>
    </HTML>
    
    Visual C# .NET 예제
    <%@ Page Language="c#" AutoEventWireup="true" %>
    <%@ Import namespace="System.Diagnostics" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    	<script language="C#" runat="server">
    	void WriteEvent_Click(Object Src, EventArgs e)
    	{
    	EventLog ev = new EventLog("Application");
    	// Event's Source name
    	ev.Source = "TEST";  
    		EventLog.CreateEventSource(ev.Source, "Application");
    
    			try
    			{
    				ev.WriteEntry(TextBox1.Text);
    			}
    			catch (Exception b)
    			{
    				Response.Write("WriteEntry " + b.Message + "<br>");
    			}
    			ev = null;
    	}
    	</script>
    
    	<body>
    		<form id="Form1" runat="server">
    			Event message: 
    			<asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>
    			<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Write to event log"></asp:button>
    		</form>
    	</body>
    </HTML>
  3. 디버그 메뉴에서 시작을 눌러 브라우저에서 WebForm1.aspx 페이지를 봅니다.
  4. TextBox에 일부 텍스트를 입력한 다음 Write to event log를 누릅니다.
  5. 이 문서의 "현상" 절에서 설명하는 오류 메시지가 나타납니다.
  6. 이 문제를 해결하려면 "해결책" 절에서 설명하는 이벤트 원본을 만들고 WebForm1.aspx에 다음 코드를 주석으로 추가합니다.
    EventLog.CreateEventSource(ev.Source, "Application")
  7. 3-4단계를 반복합니다.

참조

자세한 내용을 보려면 다음 Microsoft 웹 사이트를 방문하십시오.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbwlkWalkthroughCreatingEventLogInstallers.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdiagnosticseventlogclasstopic.asp




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 329291 - 마지막 검토: 2007년 12월 4일 화요일 - 수정: 2.6
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Internet Information Services 5.0
  • Microsoft Internet Information Services version 5.1
  • Microsoft Internet Information Services 6.0
키워드:?
kberrmsg kbwebforms kbsecurity kbprb KB329291

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com