Dieser Artikel enthält Informationen zum Bearbeiten der Registrierung. Bevor Sie die Registrierung bearbeiten, ist es wichtig zu verstehen, wie Sie die Registrierung wiederherstellen können, wenn ein Problem auftritt. Informationen zum Wiederherstellen der Registrierung finden Sie im Hilfethema „Wiederherstellen der Registrierung“ in Regedit.exe oder im Hilfethema „Wiederherstellen von Registrierungsschlüsseln“ in Regedt32.exe.
Phänomen
Wenn Sie ASP.NET verwenden, um eine neue „Ereignisquelle“ in das Ereignisprotokoll zu schreiben, erhalten Sie möglicherweise die folgende Fehlermeldung: System.Security.SecurityException: Der angeforderte Registrierungszugriff ist nicht zulässig.
Der Grund, warum
der ASP.NET-Prozess
nicht zulässig istläuft ist Der Standardbenutzer ist ASPNET (NetworkService unter IIS6.0), und dieser Benutzer hat keine Berechtigung zum Erstellen einer „Ereignisquelle“.
Hinweis zurLösung
: (Microsoft wird nicht viel sagen, wenn Sie Sie erschrecken möchten, z. B. das Bearbeiten der Registrierung führt zum Absturz des Systems.) Wenn Sie dieses Problem lösen müssen, müssen Sie von einem Benutzer mit Administratorrechten eine „Ereignisquelle“ erstellen, bevor Sie dieses Asp.net-Programm ausführen. Es gibt verschiedene Methoden zum Erstellen von „Ereignisquellen“.
Die erste Methode
verwendet die folgenden Schritte, um eine „Ereignisquelle“ unter „Anwendungsprotokoll“ im Registrierungseditor
1 zu erstellen. Klicken Sie auf „Start“ und dann auf „Ausführen“.
2. Geben Sie „regedit“ in das Feld „Öffnen“ ein.
3. Suchen Sie den folgenden Unterschlüssel:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication
4. Klicken Sie mit der rechten Maustaste auf „Anwendung“, klicken Sie auf „Neu“ und dann auf „Element“
5. Benennen Sie dieses neue Element in „Test“
6 um. Schließen Sie den Registrierungseditor
Die zweite Methode
verfügt über eine EventLogInstaller-Klasse im System.Diagnostics-Namespace. Es erstellt und konfiguriert Ereignisprotokolle, die Ihre Anwendung zur Laufzeit liest und schreibt. Durch die folgenden Schritte können wir die EventLogInstaller-Klasse verwenden, um eine „Quelle für die Veranstaltungsbranche“
1 zu erstellen. Verwenden Sie VB.NET oder C#, um eine „Klassenbibliothek“ namens EventLogSourceInstaller zu erstellen.
2. Fügen Sie im Projekt einen Verweis auf System.Configuration.Install.dll hinzu.
3. Benennen Sie die automatisch generierte Klasse Class.VbClass.cs in MyEventLogInstaller.vbMyEventLogInstaller.cs um.
4. Ersetzen Sie den Inhalt in MyEventLogInstaller.vb oder MyEventLogInstaller.cs durch den folgenden Code:
Visual Basic .NET Sample
ImportsSystem.Diagnostics
Importiert System.Configuration.Install
Importiert System.ComponentModel
<RunInstaller(True)> _
Öffentliche Klasse MyEventLogInstaller
Erbt den Installer
Private myEventLogInstaller As EventLogInstaller
Public Sub New()
' Erstellen Sie eine Instanz von „EventLogInstaller“.
myEventLogInstaller = Neuer EventLogInstaller()
' Legen Sie die „Quelle“ des zu erstellenden Ereignisprotokolls fest.computerDownloadFilesarticle27.
myEventLogInstaller.Source = "TEST"
' Legen Sie das „Protokoll“ fest, in dem die Quelle erstellt wird.
myEventLogInstaller.Log = "Anwendung"
' Fügen Sie myEventLogInstaller zu „InstallerCollection“ hinzu.
Installers.Add(myEventLogInstaller)
Sub beenden
End Class
Visual C# .NET-Beispiel
Verwenden des Systems;
Verwenden von System.Diagnostics;
mit System.ComponentModel;
mit System.Configuration.Install;
Namespace EventLogSourceInstaller
{
[RunInstaller(true)]
öffentliche Klasse MyEventLogInstaller: Installer
{
privater EventLogInstaller myEventLogInstaller;
public MyEventLogInstaller()
{
//Instanz von EventLogInstaller erstellen
myEventLogInstaller = new EventLogInstaller();
// Legen Sie die Quelle des zu erstellenden Ereignisprotokolls fest..computerDownloadFilesarticle27.
myEventLogInstaller.Source = "TEST";
// Legen Sie das Protokoll fest, in dem die Quelle erstellt wird
myEventLogInstaller.Log = "Application";
// myEventLogInstaller zur Installers-Sammlung hinzufügen.
Installers.Add(myEventLogInstaller);
}
}
}
5. Erstellen Sie dieses Projekt und holen Sie sich EventLogSourceInstaller.dll.
6. Öffnen Sie die Eingabeaufforderung von Visual Studio .NET und wechseln Sie in das Verzeichnis, in dem sich EventLogSourceInstaller.dll befindet.
7. Führen Sie diesen Befehl aus, um die „Ereignisquelle“ zu erstellen: InstallUtil EventLogSourceInstaller.dll
Weitere detaillierte Informationen
Wir reproduzieren den oben genannten Fehler und lösen dieses Problem durch die Erstellung einer Webanwendung.
1. Verwenden Sie VB.Net oder C#, um eine Asp.net-Webanwendung zu erstellen.
2. Ersetzen Sie den Code in WebForm1.aspx durch den folgenden Code:
Visual Basic .NET Sample
<%@ 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..computerDownloadFilesarticle27, e As EventArgs)
Dim ev As New EventLog("Application")
'Quellenname des Ereignisses
ev.Source = "TEST"
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
Versuchen Sie es
ev.WriteEntry(TextBox1.Text)
Fangen Sie b als Ausnahme
Response.write ("WriteEntry " & b.message & "<br>")
Beenden Sie den Versuch
ev=Nichts
Sub beenden
</script>
<body>
<form id="Form1" runat="server">
Ereignismeldung:
<asp:textbox id="TextBox1" runat="server" Breite="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="In Ereignisprotokoll schreiben"></asp:button>
</form>
</Körper>
</HTML>
Visual C# .NET-Beispiel
<%@ 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..computerDownloadFilesarticle27, EventArgs e)
{
EventLog ev = new EventLog("Application");
//Quellenname des Ereignisses
ev.Source = "TEST";
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
;
{
ev.WriteEntry(TextBox1.Text);
}
Fang (Ausnahme b)
{
Response.Write("WriteEntry " + b.Message + "<br>");
}
ev = null;
}
</script>
<body>
<form id="Form1" runat="server">
Ereignismeldung:
<asp:textbox id="TextBox1" runat="server" Breite="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="In Ereignisprotokoll schreiben"></asp:button>
</form>
</Körper>
</HTML>
3. Drücken Sie F5, um dieses Projekt zu starten.
4. Geben Sie einige Zeichen in das Textfeld ein und klicken Sie auf „In Ereignisprotokoll schreiben“.
5. Die im Abschnitt „Symptome“ oben erwähnte Fehlermeldung wird angezeigt.
6. Um dieses Problem zu lösen, kommentieren Sie die folgende Codezeile in Webform1.aspx
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
; Starten Sie dieses Projekt neu.
http://www.cnblogs.com/niit007/archive/2006/08/13/475510.html