이 문서에는 레지스트리 편집에 대한 정보가 포함되어 있습니다. 레지스트리를 편집하기 전에 문제가 발생할 경우 레지스트리를 복원하는 방법을 이해하는 것이 중요합니다. 레지스트리를 복원하는 방법에 대한 자세한 내용은 Regedit.exe의 "레지스트리 복원" 도움말 항목이나 Regedt32.exe의 "레지스트리 키 복원" 도움말 항목을 참조하십시오.
현상
ASP.NET을 사용하여 이벤트 로그에 새 "이벤트 소스"를 기록하면 다음과 같은 오류 메시지가 나타날 수 있습니다. System.Security.SecurityException: 요청한 레지스트리 액세스가
ASP.NET 프로세스
에
허용되지 않습니다.is running is 기본 사용자는 ASPNET(IIS6.0의 NetworkService)이고 이 사용자에게는 "이벤트 소스"를 생성할 수 있는 권한이 없습니다.
해결 방법
에 대한 참고 사항: (예를 들어 레지스트리를 편집하면 시스템이 충돌할 수 있다는 등 겁을 주려는 경우 Microsoft는 많은 말을 하지 않습니다.) 이 문제를 해결하려면 이 Asp.net 프로그램을 실행하기 전에 관리자 권한이 있는 사용자가 "이벤트 소스"를 만들어야 합니다. "이벤트 소스"를 생성하는 방법에는 여러 가지가 있습니다.
첫 번째 방법은
다음 단계를 사용하여 레지스트리 편집기의 "응용 프로그램 로그" 아래에 "이벤트 소스"를 생성합니다
. 1. "시작"을 클릭한 다음 "실행"을 클릭합니다.
2. "열기" 상자에 "regedit"를 입력합니다.
3. 다음 하위 키를 찾습니다:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication
4. "응용 프로그램"을 마우스 오른쪽 버튼으로 클릭하고 "새로 만들기"를 클릭한 다음 "항목"을 클릭합니다
. 5. 이 새 항목의 이름을 "Test"로 변경합니다
. 6. 레지스트리 편집기 닫기
두 번째 방법에는
System.Diagnostics 네임스페이스에 EventLogInstaller 클래스가 있습니다. 애플리케이션이 런타임에 읽고 쓰는 이벤트 로그를 생성하고 구성합니다. 다음 단계를 통해 EventLogInstaller 클래스를 사용하여 "이벤트 산업 소스"를 생성할 수 있습니다
. 1. VB.NET 또는 C#을 사용하여 EventLogSourceInstaller라는 "클래스 라이브러리"를 만듭니다.
2. 프로젝트에 System.Configuration.Install.dll에 대한 참조를 추가합니다.
3. 자동으로 생성된 Class.VbClass.cs의 이름을 MyEventLogInstaller.vbMyEventLogInstaller.cs로 바꿉니다.
4. MyEventLogInstaller.vb 또는 MyEventLogInstaller.cs의 내용을 다음 코드로 바꿉니다.
Visual Basic .NET 샘플
ImportsSystem.Diagnostics
시스템.구성.설치를 가져옵니다.
System.ComponentModel
<RunInstaller(True)> 가져오기 _
공개 클래스 MyEventLogInstaller
설치 프로그램 상속
Public Sub New()
로 비공개 myEventLogInstaller
' 'EventLogInstaller' 인스턴스를 만듭니다.
myEventLogInstaller = 새 EventLogInstaller()
' 생성할 이벤트 로그..computerDownloadFilesarticle27의 '소스'를 설정합니다.
myEventLogInstaller.Source = "테스트"
' 소스가 생성되는 '로그'를 설정합니다.
myEventLogInstaller.Log = "응용 프로그램"
' 'InstallerCollection'에 myEventLogInstaller를 추가합니다.
Installers.Add(myEventLogInstaller)
서브 끝
종료 클래스
Visual C# .NET 샘플
시스템 사용;
System.Diagnostics 사용;
System.ComponentModel 사용;
System.Configuration.Install 사용;
네임스페이스 EventLogSourceInstaller
{
[설치 프로그램 실행(true)]
공개 클래스 MyEventLogInstaller : 설치 프로그램
{
개인 EventLogInstaller myEventLogInstaller
()
{
//EventLogInstaller 인스턴스 생성
myEventLogInstaller = new EventLogInstaller();
// 생성할 이벤트 로그의 소스를 설정합니다..computerDownloadFilesarticle27.
myEventLogInstaller.Source = "TEST";
// 소스가 생성된 로그를 설정합니다.
myEventLogInstaller.Log = "Application";
// 설치 프로그램 컬렉션에 myEventLogInstaller를 추가합니다.
Installers.Add(myEventLogInstaller);
}
}
}
5. 이 프로젝트를 빌드하고 EventLogSourceInstaller.dll을 가져옵니다.
6. Visual Studio .NET 명령 프롬프트를 열고 EventLogSourceInstaller.dll이 있는 디렉터리로 이동합니다.
7. "이벤트 소스"를 생성하려면 다음 명령을 실행하십시오. InstallUtil EventLogSourceInstaller.dll
자세한 정보
위의 오류를 재현하고 웹 애플리케이션을 생성하여 이 문제를 해결합니다.
1. VB.Net 또는 C#을 사용하여 Asp.net 웹 애플리케이션을 구축하세요.
2. WebForm1.aspx의 코드를 다음 코드로 바꿉니다.
Visual Basic .NET 샘플
<%@ 페이지 언어="vb" AutoEventWireup="true" %>
<%@ 가져오기 네임스페이스="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<스크립트 언어="VB" runat="서버">
하위 WriteEvent_Click(Src As Object..computerDownloadFilesarticle27, e As EventArgs)
Dim ev를 새 EventLog("응용 프로그램")로 사용
'이벤트의 소스 이름
ev.Source = "TEST"
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "응용 프로그램"
)
ev.WriteEntry(TextBox1.Text)
b를 예외로 잡아라
Response.write ("WriteEntry " & b.message & "<br>")
시도 종료
ev=아무것도 없음
서브 끝
</script>
<본문>
<양식 id="Form1" runat="서버">
이벤트 메시지:
<asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="이벤트 로그에 쓰기"></asp:button>
</양식>
</본문>
</HTML>
Visual C# .NET 샘플
<%@ 페이지 언어="c#" AutoEventWireup="true" %>
<%@ 가져오기 네임스페이스="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<스크립트 언어="C#" runat="서버">
무효 WriteEvent_Click(개체 Src..computerDownloadFilesarticle27, EventArgs e)
{
EventLog ev = new EventLog("애플리케이션");
//이벤트 소스 이름
ev.Source = "TEST";
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "응용 프로그램")
;
{
ev.WriteEntry(TextBox1.Text);
}
잡기 (예외 b)
{
Response.Write("WriteEntry " + b.Message + "<br>");
}
ev = null;
}
</script>
<본문>
<양식 id="Form1" runat="서버">
이벤트 메시지:
<asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="이벤트 로그에 쓰기"></asp:button>
</양식>
</본문>
</HTML>
3. 이 프로젝트를 시작하려면 F5 키를 누르세요.
4. TextBox에 일부 문자를 입력하고 이벤트 로그에 쓰기를 클릭합니다.
5. 위의 "현상" 절에 언급된 오류 메시지가 나타납니다.
6. 이 문제를 해결하려면 Webform1.aspx에서 다음 코드 줄을 주석 처리하세요.
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "응용 프로그램")
7. 이 프로젝트를 다시 시작하세요.
http://www.cnblogs.com/niit007/archive/2006/08/13/475510.html