EventLog.CreateEventSource Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt eine Anwendung so ein, dass Ereignisinformationen in ein bestimmtes Protokoll im System geschrieben werden können.
Überlädt
CreateEventSource(EventSourceCreationData) |
Richtet eine gültige Ereignisquelle zum Schreiben lokalisierter Ereignismeldungen ein, wobei die angegebenen Konfigurationseigenschaften für die Ereignisquelle und das entsprechende Ereignisprotokoll verwendet werden. |
CreateEventSource(String, String) |
Legt den angegebenen Quellnamen als gültige Ereignisquelle zum Schreiben von Einträgen in ein Protokoll auf dem lokalen Computer fest. Diese Methode kann auch ein neues benutzerdefiniertes Protokoll auf dem lokalen Computer erstellen. |
CreateEventSource(String, String, String) |
Veraltet.
Veraltet.
Veraltet.
Legt den angegebenen Quellnamen als gültige Ereignisquelle zum Schreiben von Einträgen in ein Protokoll auf dem angegebenen Computer fest. Diese Methode kann auch verwendet werden, um ein neues benutzerdefiniertes Protokoll auf dem angegebenen Computer zu erstellen. |
CreateEventSource(EventSourceCreationData)
- Quelle:
- EventLog.cs
- Quelle:
- EventLog.cs
- Quelle:
- EventLog.cs
- Quelle:
- EventLog.cs
Richtet eine gültige Ereignisquelle zum Schreiben lokalisierter Ereignismeldungen ein, wobei die angegebenen Konfigurationseigenschaften für die Ereignisquelle und das entsprechende Ereignisprotokoll verwendet werden.
public:
static void CreateEventSource(System::Diagnostics::EventSourceCreationData ^ sourceData);
public static void CreateEventSource (System.Diagnostics.EventSourceCreationData sourceData);
static member CreateEventSource : System.Diagnostics.EventSourceCreationData -> unit
Public Shared Sub CreateEventSource (sourceData As EventSourceCreationData)
Parameter
- sourceData
- EventSourceCreationData
Die Konfigurationseigenschaften für die Ereignisquelle und das zugehörige Zielereignisprotokoll.
Ausnahmen
Der in sourceData
angegebene Computername ist ungültig.
-oder-
Der in sourceData
angegebene Quellname ist null
.
-oder-
Der in sourceData
angegebene Protokollname ist ungültig. Ereignisprotokollnamen müssen aus druckbaren Zeichen bestehen und dürfen die Zeichen '*', '?' oder '\' nicht enthalten.
-oder-
Der in sourceData
angegebene Protokollname ist für die Erstellung von Benutzerprotokollen ungültig. Die Ereignisprotokollnamen "AppEvent", "SysEvent" und "SecEvent" sind für die Systemverwendung reserviert.
-oder-
Der Protokollname entspricht einem vorhandenen Ereignisquellnamen.
-oder-
Der in sourceData
angegebene Quellname führt zu einem Registrierungsschlüsselpfad, der länger als 254 Zeichen ist.
-oder-
Die ersten 8 Zeichen des in sourceData
angegebenen Protokollnamens sind nicht eindeutig.
-oder-
Der in sourceData
angegebene Quellname ist bereits registriert.
-oder-
Der in sourceData
angegebene Quellname entspricht einem vorhandenen Ereignisprotokollnamen.
Der Registrierungsschlüssel für das Ereignisprotokoll konnte nicht geöffnet werden.
sourceData
ist null
.
Beispiele
Im folgenden Beispiel wird ermittelt, ob die Ereignisquelle mit dem Namen SampleApplicationSource
auf dem lokalen Computer registriert ist. Wenn die Ereignisquelle nicht vorhanden ist, legt das Beispiel die Nachrichtenressourcendatei für die Quelle fest und erstellt die neue Ereignisquelle. Schließlich legt das Beispiel den lokalisierten Anzeigenamen für das Ereignisprotokoll fest, wobei der Ressourcenbezeichnerwert in DisplayNameMsgId
und der Ressourcendateipfad in messageFile
verwendet wird.
void CreateEventSourceSample1( String^ messageFile )
{
String^ myLogName;
String^ sourceName = "SampleApplicationSource";
// Create the event source if it does not exist.
if ( !EventLog::SourceExists( sourceName ) )
{
// Create a new event source for the custom event log
// named "myNewLog."
myLogName = "myNewLog";
EventSourceCreationData ^ mySourceData = gcnew EventSourceCreationData( sourceName,myLogName );
// Set the message resource file that the event source references.
// All event resource identifiers correspond to text in this file.
if ( !System::IO::File::Exists( messageFile ) )
{
Console::WriteLine( "Input message resource file does not exist - {0}", messageFile );
messageFile = "";
}
else
{
// Set the specified file as the resource
// file for message text, category text, and
// message parameter strings.
mySourceData->MessageResourceFile = messageFile;
mySourceData->CategoryResourceFile = messageFile;
mySourceData->CategoryCount = CategoryCount;
mySourceData->ParameterResourceFile = messageFile;
Console::WriteLine( "Event source message resource file set to {0}", messageFile );
}
Console::WriteLine( "Registering new source for event log." );
EventLog::CreateEventSource( mySourceData );
}
else
{
// Get the event log corresponding to the existing source.
myLogName = EventLog::LogNameFromSourceName( sourceName, "." );
}
// Register the localized name of the event log.
// For example, the actual name of the event log is "myNewLog," but
// the event log name displayed in the Event Viewer might be
// "Sample Application Log" or some other application-specific
// text.
EventLog^ myEventLog = gcnew EventLog( myLogName,".",sourceName );
if ( messageFile->Length > 0 )
{
myEventLog->RegisterDisplayName( messageFile, DisplayNameMsgId );
}
}
static void CreateEventSourceSample1(string messageFile)
{
string myLogName;
string sourceName = "SampleApplicationSource";
// Create the event source if it does not exist.
if(!EventLog.SourceExists(sourceName))
{
// Create a new event source for the custom event log
// named "myNewLog."
myLogName = "myNewLog";
EventSourceCreationData mySourceData = new EventSourceCreationData(sourceName, myLogName);
// Set the message resource file that the event source references.
// All event resource identifiers correspond to text in this file.
if (!System.IO.File.Exists(messageFile))
{
Console.WriteLine("Input message resource file does not exist - {0}",
messageFile);
messageFile = "";
}
else
{
// Set the specified file as the resource
// file for message text, category text, and
// message parameter strings.
mySourceData.MessageResourceFile = messageFile;
mySourceData.CategoryResourceFile = messageFile;
mySourceData.CategoryCount = CategoryCount;
mySourceData.ParameterResourceFile = messageFile;
Console.WriteLine("Event source message resource file set to {0}",
messageFile);
}
Console.WriteLine("Registering new source for event log.");
EventLog.CreateEventSource(mySourceData);
}
else
{
// Get the event log corresponding to the existing source.
myLogName = EventLog.LogNameFromSourceName(sourceName,".");
}
// Register the localized name of the event log.
// For example, the actual name of the event log is "myNewLog," but
// the event log name displayed in the Event Viewer might be
// "Sample Application Log" or some other application-specific
// text.
EventLog myEventLog = new EventLog(myLogName, ".", sourceName);
if (messageFile.Length > 0)
{
myEventLog.RegisterDisplayName(messageFile, DisplayNameMsgId);
}
}
Public Shared Sub CreateEventSourceSample1(ByVal messageFile As String)
Dim myLogName As String
Dim sourceName As String = "SampleApplicationSource"
' Create the event source if it does not exist.
If Not EventLog.SourceExists(sourceName)
' Create a new event source for the custom event log
' named "myNewLog."
myLogName = "myNewLog"
Dim mySourceData As EventSourceCreationData = New EventSourceCreationData(sourceName, myLogName)
' Set the message resource file that the event source references.
' All event resource identifiers correspond to text in this file.
If Not System.IO.File.Exists(messageFile)
Console.WriteLine("Input message resource file does not exist - {0}", _
messageFile)
messageFile = ""
Else
' Set the specified file as the resource
' file for message text, category text and
' message parameters strings.
mySourceData.MessageResourceFile = messageFile
mySourceData.CategoryResourceFile = messageFile
mySourceData.CategoryCount = CategoryCount
mySourceData.ParameterResourceFile = messageFile
Console.WriteLine("Event source message resource file set to {0}", _
messageFile)
End If
Console.WriteLine("Registering new source for event log.")
EventLog.CreateEventSource(mySourceData)
Else
' Get the event log corresponding to the existing source.
myLogName = EventLog.LogNameFromSourceName(sourceName,".")
End If
' Register the localized name of the event log.
' For example, the actual name of the event log is "myNewLog," but
' the event log name displayed in the Event Viewer might be
' "Sample Application Log" or some other application-specific
' text.
Dim myEventLog As EventLog = New EventLog(myLogName, ".", sourceName)
If messageFile.Length > 0
myEventLog.RegisterDisplayName(messageFile, DisplayNameMsgId)
End If
End Sub
Im Beispiel wird die folgende Nachrichtentextdatei verwendet, die in die Ressourcenbibliothek EventLogMsgs.dllintegriert ist. Eine Nachrichtentextdatei ist die Quelle, aus der die Nachrichtenressourcendatei erstellt wird. Die Nachrichtentextdatei definiert die Ressourcenbezeichner und den Text für die Kategorie, Ereignisnachricht und Parametereinfügungszeichenfolgen. Insbesondere wird der Ressourcenbezeichner 5001 für den lokalisierten Namen des Ereignisprotokolls definiert.
; // EventLogMsgs.mc
; // ********************************************************
; // Use the following commands to build this file:
; // mc -s EventLogMsgs.mc
; // rc EventLogMsgs.rc
; // link /DLL /SUBSYSTEM:WINDOWS /NOENTRY /MACHINE:x86 EventLogMsgs.Res
; // ********************************************************
; // - Event categories -
; // Categories must be numbered consecutively starting at 1.
; // ********************************************************
MessageId=0x1
Severity=Success
SymbolicName=INSTALL_CATEGORY
Language=English
Installation
.
MessageId=0x2
Severity=Success
SymbolicName=QUERY_CATEGORY
Language=English
Database Query
.
MessageId=0x3
Severity=Success
SymbolicName=REFRESH_CATEGORY
Language=English
Data Refresh
.
; // - Event messages -
; // *********************************
MessageId = 1000
Severity = Success
Facility = Application
SymbolicName = AUDIT_SUCCESS_MESSAGE_ID_1000
Language=English
My application message text, in English, for message id 1000, called from %1.
.
MessageId = 1001
Severity = Warning
Facility = Application
SymbolicName = AUDIT_FAILED_MESSAGE_ID_1001
Language=English
My application message text, in English, for message id 1001, called from %1.
.
MessageId = 1002
Severity = Success
Facility = Application
SymbolicName = GENERIC_INFO_MESSAGE_ID_1002
Language=English
My generic information message in English, for message id 1002.
.
MessageId = 1003
Severity = Warning
Facility = Application
SymbolicName = GENERIC_WARNING_MESSAGE_ID_1003
Language=English
My generic warning message in English, for message id 1003, called from %1.
.
MessageId = 1004
Severity = Success
Facility = Application
SymbolicName = UPDATE_CYCLE_COMPLETE_MESSAGE_ID_1004
Language=English
The update cycle is complete for %%5002.
.
MessageId = 1005
Severity = Warning
Facility = Application
SymbolicName = SERVER_CONNECTION_DOWN_MESSAGE_ID_1005
Language=English
The refresh operation did not complete because the connection to server %1 could not be established.
.
; // - Event log display name -
; // ********************************************************
MessageId = 5001
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_DISPLAY_NAME_MSGID
Language=English
Sample Event Log
.
; // - Event message parameters -
; // Language independent insertion strings
; // ********************************************************
MessageId = 5002
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_SERVICE_NAME_MSGID
Language=English
SVC_UPDATE.EXE
.
Hinweise
Verwenden Sie diese Überladung, um eine neue Quelle zum Schreiben von Einträgen in ein Ereignisprotokoll auf dem lokalen Computer oder einem Remotecomputer zu konfigurieren. Es ist nicht erforderlich, diese Methode zum Lesen aus einem Ereignisprotokoll zu verwenden.
Die CreateEventSource-Methode verwendet die Eingabe sourceData
Source, LogName und MachineName Eigenschaften, um Registrierungswerte auf dem Zielcomputer für die neue Quelle und das zugehörige Ereignisprotokoll zu erstellen. Ein neuer Quellname kann nicht mit einem vorhandenen Quellnamen oder einem vorhandenen Ereignisprotokollnamen auf dem Zielcomputer übereinstimmen. Wenn die LogName-Eigenschaft nicht festgelegt ist, wird die Quelle für das Anwendungsereignisprotokoll registriert. Wenn die MachineName nicht festgelegt ist, wird die Quelle auf dem lokalen Computer registriert.
Anmerkung
Um eine Ereignisquelle in Windows Vista und höher oder Windows Server 2003 zu erstellen, müssen Sie über Administratorrechte verfügen.
Der Grund für diese Anforderung ist, dass alle Ereignisprotokolle, einschließlich Sicherheit, durchsucht werden müssen, um festzustellen, ob die Ereignisquelle eindeutig ist. Ab Windows Vista verfügen Benutzer nicht über die Berechtigung für den Zugriff auf das Sicherheitsprotokoll. daher wird ein SecurityException ausgelöst.
Ab Windows Vista bestimmt die Benutzerkontensteuerung (User Account Control, UAC) die Berechtigungen eines Benutzers. Wenn Sie Mitglied der Gruppe "Integrierte Administratoren" sind, werden Ihnen zwei Laufzeitzugriffstoken zugewiesen: ein Standardbenutzerzugriffstoken und ein Administratorzugriffstoken. Standardmäßig befinden Sie sich in der Standardbenutzerrolle. Um den Code auszuführen, der auf das Sicherheitsprotokoll zugreift, müssen Sie zuerst Ihre Berechtigungen vom Standardbenutzer zum Administrator erhöhen. Sie können dies tun, wenn Sie eine Anwendung starten, indem Sie mit der rechten Maustaste auf das Anwendungssymbol klicken und angeben, dass Sie als Administrator ausführen möchten.
Verwenden Sie WriteEvent und WriteEntry, um Ereignisse in ein Ereignisprotokoll zu schreiben. Sie müssen eine Ereignisquelle zum Schreiben von Ereignissen angeben; Sie müssen die Ereignisquelle erstellen und konfigurieren, bevor Sie den ersten Eintrag mit der Quelle schreiben.
Erstellen Sie die neue Ereignisquelle während der Installation Ihrer Anwendung. Dadurch kann das Betriebssystem seine Liste der registrierten Ereignisquellen und deren Konfiguration aktualisieren. Wenn das Betriebssystem seine Liste der Ereignisquellen nicht aktualisiert hat und Sie versuchen, ein Ereignis mit der neuen Quelle zu schreiben, schlägt der Schreibvorgang fehl. Sie können eine neue Quelle mithilfe einer EventLogInstallerkonfigurieren oder die CreateEventSource-Methode verwenden. Sie müssen über Administratorrechte auf dem Computer verfügen, um eine neue Ereignisquelle zu erstellen.
Sie können eine Ereignisquelle für ein vorhandenes Ereignisprotokoll oder ein neues Ereignisprotokoll erstellen. Wenn Sie eine neue Quelle für ein neues Ereignisprotokoll erstellen, registriert das System die Quelle für dieses Protokoll, aber das Protokoll wird erst erstellt, wenn der erste Eintrag in das Protokoll geschrieben wird.
Das Betriebssystem speichert Ereignisprotokolle als Dateien. Wenn Sie EventLogInstaller oder CreateEventSource zum Erstellen eines neuen Ereignisprotokolls verwenden, wird die zugeordnete Datei im Verzeichnis %SystemRoot%\System32\Config auf dem angegebenen Computer gespeichert. Der Dateiname wird festgelegt, indem die ersten 8 Zeichen der eigenschaft Log mit der Dateinamenerweiterung ".evt" angefügt werden.
Jede Quelle kann nur jeweils in ein Ereignisprotokoll schreiben; Ihre Anwendung kann jedoch mehrere Quellen verwenden, um in mehrere Ereignisprotokolle zu schreiben. Ihre Anwendung kann z. B. mehrere Quellen erfordern, die für unterschiedliche Ereignisprotokolle oder unterschiedliche Ressourcendateien konfiguriert sind.
Sie können die Ereignisquelle bei lokalisierten Ressourcendateien für Ihre Ereigniskategorie und Nachrichtenzeichenfolgen registrieren. Ihre Anwendung kann Ereignisprotokolleinträge mithilfe von Ressourcenbezeichnern schreiben, anstatt die tatsächliche Zeichenfolge anzugeben. Die Ereignisanzeige verwendet den Ressourcenbezeichner, um die entsprechende Zeichenfolge aus der lokalisierten Ressourcendatei basierend auf den aktuellen Spracheinstellungen zu suchen und anzuzeigen. Sie können eine separate Datei für Ereigniskategorien, Nachrichten und Parametereinfügungszeichenfolgen registrieren, oder Sie können dieselbe Ressourcendatei für alle drei Arten von Zeichenfolgen registrieren. Verwenden Sie die Eigenschaften CategoryCount, CategoryResourceFile, MessageResourceFileund ParameterResourceFile, um die Quelle so zu konfigurieren, dass lokalisierte Einträge in das Ereignisprotokoll geschrieben werden. Wenn Ihre Anwendung Zeichenfolgenwerte direkt in das Ereignisprotokoll schreibt, müssen Sie diese Eigenschaften nicht festlegen.
Die Quelle muss entweder für das Schreiben lokalisierter Einträge oder für das Schreiben von direkten Zeichenfolgen konfiguriert werden. Wenn Ihre Anwendung Einträge mit Ressourcenbezeichnern und Zeichenfolgenwerten schreibt, müssen Sie zwei separate Quellen registrieren. Konfigurieren Sie beispielsweise eine Quelle mit Ressourcendateien, und verwenden Sie diese Quelle in der WriteEvent-Methode, um Einträge mithilfe von Ressourcenbezeichnern in das Ereignisprotokoll zu schreiben. Erstellen Sie dann eine andere Quelle ohne Ressourcendateien, und verwenden Sie diese Quelle in der WriteEntry-Methode, um Zeichenfolgen mithilfe dieser Quelle direkt in das Ereignisprotokoll zu schreiben.
Um die Konfigurationsdetails einer vorhandenen Quelle zu ändern, müssen Sie die Quelle löschen und dann mit der neuen Konfiguration erstellen. Wenn andere Anwendungen oder Komponenten die vorhandene Quelle verwenden, erstellen Sie eine neue Quelle mit der aktualisierten Konfiguration, anstatt die vorhandene Quelle zu löschen.
Anmerkung
Wenn eine Quelle für ein Ereignisprotokoll konfiguriert ist und Sie es für ein anderes Ereignisprotokoll neu konfigurieren, müssen Sie den Computer neu starten, damit die Änderungen wirksam werden.
Weitere Informationen
Gilt für:
CreateEventSource(String, String)
- Quelle:
- EventLog.cs
- Quelle:
- EventLog.cs
- Quelle:
- EventLog.cs
- Quelle:
- EventLog.cs
Legt den angegebenen Quellnamen als gültige Ereignisquelle zum Schreiben von Einträgen in ein Protokoll auf dem lokalen Computer fest. Diese Methode kann auch ein neues benutzerdefiniertes Protokoll auf dem lokalen Computer erstellen.
public:
static void CreateEventSource(System::String ^ source, System::String ^ logName);
public static void CreateEventSource (string source, string logName);
static member CreateEventSource : string * string -> unit
Public Shared Sub CreateEventSource (source As String, logName As String)
Parameter
- source
- String
Der Quellname, nach dem die Anwendung auf dem lokalen Computer registriert ist.
- logName
- String
Der Name des Protokolls, in das die Einträge der Quelle geschrieben werden. Mögliche Werte sind Application, System oder ein benutzerdefiniertes Ereignisprotokoll.
Ausnahmen
source
ist eine leere Zeichenfolge ("") oder null
.
-oder-
logName
ist kein gültiger Ereignisprotokollname. Ereignisprotokollnamen müssen aus druckbaren Zeichen bestehen und dürfen die Zeichen '*', '?' oder '\' nicht enthalten.
-oder-
logName
ist nicht gültig für die Erstellung von Benutzerprotokollen. Die Ereignisprotokollnamen AppEvent, SysEvent und SecEvent sind für die Systemverwendung reserviert.
-oder-
Der Protokollname entspricht einem vorhandenen Ereignisquellnamen.
-oder-
Der Quellname führt zu einem Registrierungsschlüsselpfad, der länger als 254 Zeichen ist.
-oder-
Die ersten 8 Zeichen logName
entsprechen den ersten 8 Zeichen eines vorhandenen Ereignisprotokollnamens.
-oder-
Die Quelle kann nicht registriert werden, da sie bereits auf dem lokalen Computer vorhanden ist.
-oder-
Der Quellname entspricht einem vorhandenen Ereignisprotokollnamen.
Der Registrierungsschlüssel für das Ereignisprotokoll konnte nicht auf dem lokalen Computer geöffnet werden.
Beispiele
Im folgenden Beispiel wird die Quelle MySource
erstellt, wenn sie noch nicht vorhanden ist, und schreibt einen Eintrag in das Ereignisprotokoll MyNewLog
.
#using <System.dll>
using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
// Create the source, if it does not already exist.
if ( !EventLog::SourceExists( "MySource" ) )
{
//An event log source should not be created and immediately used.
//There is a latency time to enable the source, it should be created
//prior to executing the application that uses the source.
//Execute this sample a second time to use the new source.
EventLog::CreateEventSource( "MySource", "MyNewLog" );
Console::WriteLine( "CreatingEventSource" );
// The source is created. Exit the application to allow it to be registered.
return 0;
}
// Create an EventLog instance and assign its source.
EventLog^ myLog = gcnew EventLog;
myLog->Source = "MySource";
// Write an informational entry to the event log.
myLog->WriteEntry( "Writing to event log." );
}
using System;
using System.Diagnostics;
using System.Threading;
class MySample{
public static void Main(){
// Create the source, if it does not already exist.
if(!EventLog.SourceExists("MySource"))
{
//An event log source should not be created and immediately used.
//There is a latency time to enable the source, it should be created
//prior to executing the application that uses the source.
//Execute this sample a second time to use the new source.
EventLog.CreateEventSource("MySource", "MyNewLog");
Console.WriteLine("CreatedEventSource");
Console.WriteLine("Exiting, execute the application a second time to use the source.");
// The source is created. Exit the application to allow it to be registered.
return;
}
// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySource";
// Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.");
}
}
Option Explicit
Option Strict
Imports System.Diagnostics
Imports System.Threading
Class MySample
Public Shared Sub Main()
If Not EventLog.SourceExists("MySource") Then
' Create the source, if it does not already exist.
' An event log source should not be created and immediately used.
' There is a latency time to enable the source, it should be created
' prior to executing the application that uses the source.
' Execute this sample a second time to use the new source.
EventLog.CreateEventSource("MySource", "MyNewLog")
Console.WriteLine("CreatingEventSource")
'The source is created. Exit the application to allow it to be registered.
Return
End If
' Create an EventLog instance and assign its source.
Dim myLog As New EventLog()
myLog.Source = "MySource"
' Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.")
End Sub
End Class
Hinweise
Verwenden Sie diese Überladung, um ein benutzerdefiniertes Protokoll zu erstellen oder eine Source für ein vorhandenes Protokoll auf dem lokalen Computer zu erstellen und zu registrieren.
Wenn logName
null
oder eine leere Zeichenfolge ("") ist, wenn Sie CreateEventSourceaufrufen, wird das Protokoll standardmäßig im Anwendungsprotokoll gespeichert. Wenn das Protokoll auf dem lokalen Computer nicht vorhanden ist, erstellt das System ein benutzerdefiniertes Protokoll und registriert Ihre Anwendung als Source für dieses Protokoll.
Anmerkung
Um eine Ereignisquelle in Windows Vista und höher oder Windows Server 2003 zu erstellen, müssen Sie über Administratorrechte verfügen.
Der Grund für diese Anforderung ist, dass alle Ereignisprotokolle, einschließlich Sicherheit, durchsucht werden müssen, um festzustellen, ob die Ereignisquelle eindeutig ist. Ab Windows Vista verfügen Benutzer nicht über die Berechtigung für den Zugriff auf das Sicherheitsprotokoll. daher wird ein SecurityException ausgelöst.
In Windows Vista und höher bestimmt die Benutzerkontensteuerung (User Account Control, UAC) die Berechtigungen eines Benutzers. Wenn Sie Mitglied der Gruppe "Integrierte Administratoren" sind, werden Ihnen zwei Laufzeitzugriffstoken zugewiesen: ein Standardbenutzerzugriffstoken und ein Administratorzugriffstoken. Standardmäßig befinden Sie sich in der Standardbenutzerrolle. Um den Code auszuführen, der auf das Sicherheitsprotokoll zugreift, müssen Sie zuerst Ihre Berechtigungen vom Standardbenutzer zum Administrator erhöhen. Sie können dies tun, wenn Sie eine Anwendung starten, indem Sie mit der rechten Maustaste auf das Anwendungssymbol klicken und angeben, dass Sie als Administrator ausführen möchten.
Sie müssen nur eine Ereignisquelle erstellen, wenn Sie in das Ereignisprotokoll schreiben. Bevor Sie einen Eintrag in ein Ereignisprotokoll schreiben, müssen Sie die Ereignisquelle mit dem Ereignisprotokoll als gültige Ereignisquelle registrieren. Wenn Sie einen Protokolleintrag schreiben, verwendet das System die Source, um das entsprechende Protokoll zu finden, in dem Der Eintrag platziert werden soll. Wenn Sie das Ereignisprotokoll lesen, können Sie entweder das Sourceoder ein Log und MachineNameangeben.
Anmerkung
Sie müssen die MachineName nicht angeben, wenn Sie eine Verbindung mit einem Protokoll auf dem lokalen Computer herstellen. Wenn Sie die MachineName beim Lesen aus einem Protokoll nicht angeben, wird der lokale Computer (".") angenommen.
Verwenden Sie WriteEvent und WriteEntry, um Ereignisse in ein Ereignisprotokoll zu schreiben. Sie müssen eine Ereignisquelle zum Schreiben von Ereignissen angeben; Sie müssen die Ereignisquelle erstellen und konfigurieren, bevor Sie den ersten Eintrag mit der Quelle schreiben.
Erstellen Sie die neue Ereignisquelle während der Installation Ihrer Anwendung. Dadurch kann das Betriebssystem seine Liste der registrierten Ereignisquellen und deren Konfiguration aktualisieren. Wenn das Betriebssystem seine Liste der Ereignisquellen nicht aktualisiert hat und Sie versuchen, ein Ereignis mit der neuen Quelle zu schreiben, schlägt der Schreibvorgang fehl. Sie können eine neue Quelle mithilfe einer EventLogInstallerkonfigurieren oder die CreateEventSource-Methode verwenden. Sie müssen über Administratorrechte auf dem Computer verfügen, um eine neue Ereignisquelle zu erstellen.
Sie können eine Ereignisquelle für ein vorhandenes Ereignisprotokoll oder ein neues Ereignisprotokoll erstellen. Wenn Sie eine neue Quelle für ein neues Ereignisprotokoll erstellen, registriert das System die Quelle für dieses Protokoll, aber das Protokoll wird erst erstellt, wenn der erste Eintrag in das Protokoll geschrieben wird.
Das Betriebssystem speichert Ereignisprotokolle als Dateien. Wenn Sie EventLogInstaller oder CreateEventSource zum Erstellen eines neuen Ereignisprotokolls verwenden, wird die zugeordnete Datei im Verzeichnis %SystemRoot%\System32\Config auf dem angegebenen Computer gespeichert. Der Dateiname wird festgelegt, indem die ersten 8 Zeichen der eigenschaft Log mit der Dateinamenerweiterung ".evt" angefügt werden.
Die Quelle muss auf dem lokalen Computer eindeutig sein; Ein neuer Quellname kann nicht mit einem vorhandenen Quellnamen oder einem vorhandenen Ereignisprotokollnamen übereinstimmen. Jede Quelle kann jeweils nur in ein Ereignisprotokoll schreiben; Ihre Anwendung kann jedoch mehrere Quellen verwenden, um in mehrere Ereignisprotokolle zu schreiben. Ihre Anwendung kann z. B. mehrere Quellen erfordern, die für unterschiedliche Ereignisprotokolle oder unterschiedliche Ressourcendateien konfiguriert sind.
Die Quelle muss entweder für das Schreiben lokalisierter Einträge oder für das Schreiben von direkten Zeichenfolgen konfiguriert werden. Wenn Ihre Anwendung Einträge mit Ressourcenbezeichnern und Zeichenfolgenwerten schreibt, müssen Sie zwei separate Quellen registrieren. Konfigurieren Sie beispielsweise eine Quelle mit Ressourcendateien, und verwenden Sie diese Quelle in der WriteEvent-Methode, um Einträge mithilfe von Ressourcenbezeichnern in das Ereignisprotokoll zu schreiben. Erstellen Sie dann eine andere Quelle ohne Ressourcendateien, und verwenden Sie diese Quelle in der WriteEntry-Methode, um Zeichenfolgen mithilfe dieser Quelle direkt in das Ereignisprotokoll zu schreiben.
Um die Konfigurationsdetails einer vorhandenen Quelle zu ändern, müssen Sie die Quelle löschen und dann mit der neuen Konfiguration erstellen. Wenn andere Anwendungen oder Komponenten die vorhandene Quelle verwenden, erstellen Sie eine neue Quelle mit der aktualisierten Konfiguration, anstatt die vorhandene Quelle zu löschen.
Anmerkung
Wenn eine Quelle bereits einem Protokoll zugeordnet wurde und Sie es einem neuen Protokoll zuordnen, müssen Sie den Computer neu starten, damit die Änderungen wirksam werden.
Weitere Informationen
Gilt für:
CreateEventSource(String, String, String)
- Quelle:
- EventLog.cs
- Quelle:
- EventLog.cs
- Quelle:
- EventLog.cs
- Quelle:
- EventLog.cs
Achtung
EventLog.CreateEventSource has been deprecated. Use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.
Achtung
This method has been deprecated. Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead. http://go.microsoft.com/fwlink/?linkid=14202
Achtung
This method has been deprecated. Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead. https://go.microsoft.com/fwlink/?linkid=14202
Legt den angegebenen Quellnamen als gültige Ereignisquelle zum Schreiben von Einträgen in ein Protokoll auf dem angegebenen Computer fest. Diese Methode kann auch verwendet werden, um ein neues benutzerdefiniertes Protokoll auf dem angegebenen Computer zu erstellen.
public:
static void CreateEventSource(System::String ^ source, System::String ^ logName, System::String ^ machineName);
[System.Obsolete("EventLog.CreateEventSource has been deprecated. Use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.")]
public static void CreateEventSource (string source, string logName, string machineName);
public static void CreateEventSource (string source, string logName, string machineName);
[System.Obsolete("This method has been deprecated. Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public static void CreateEventSource (string source, string logName, string machineName);
[System.Obsolete("This method has been deprecated. Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead. https://go.microsoft.com/fwlink/?linkid=14202")]
public static void CreateEventSource (string source, string logName, string machineName);
[<System.Obsolete("EventLog.CreateEventSource has been deprecated. Use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.")>]
static member CreateEventSource : string * string * string -> unit
static member CreateEventSource : string * string * string -> unit
[<System.Obsolete("This method has been deprecated. Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
static member CreateEventSource : string * string * string -> unit
[<System.Obsolete("This method has been deprecated. Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead. https://go.microsoft.com/fwlink/?linkid=14202")>]
static member CreateEventSource : string * string * string -> unit
Public Shared Sub CreateEventSource (source As String, logName As String, machineName As String)
Parameter
- source
- String
Die Quelle, von der die Anwendung auf dem angegebenen Computer registriert ist.
- logName
- String
Der Name des Protokolls, in das die Einträge der Quelle geschrieben werden. Mögliche Werte sind Application, System oder ein benutzerdefiniertes Ereignisprotokoll. Wenn Sie keinen Wert angeben, wird logName
standardmäßig auf "Application" festgelegt.
- machineName
- String
Der Name des Computers, mit dem diese Ereignisquelle registriert werden soll, oder "." für den lokalen Computer.
- Attribute
Ausnahmen
Die machineName
ist kein gültiger Computername.
-oder-
source
ist eine leere Zeichenfolge ("") oder null
.
-oder-
logName
ist kein gültiger Ereignisprotokollname. Ereignisprotokollnamen müssen aus druckbaren Zeichen bestehen und dürfen die Zeichen '*', '?' oder '\' nicht enthalten.
-oder-
logName
ist nicht gültig für die Erstellung von Benutzerprotokollen. Die Ereignisprotokollnamen AppEvent, SysEvent und SecEvent sind für die Systemverwendung reserviert.
-oder-
Der Protokollname entspricht einem vorhandenen Ereignisquellnamen.
-oder-
Der Quellname führt zu einem Registrierungsschlüsselpfad, der länger als 254 Zeichen ist.
-oder-
Die ersten 8 Zeichen logName
entsprechen den ersten 8 Zeichen eines vorhandenen Ereignisprotokollnamens auf dem angegebenen Computer.
-oder-
Die Quelle kann nicht registriert werden, da sie bereits auf dem angegebenen Computer vorhanden ist.
-oder-
Der Quellname entspricht einem vorhandenen Ereignisquellnamen.
Der Registrierungsschlüssel für das Ereignisprotokoll konnte auf dem angegebenen Computer nicht geöffnet werden.
Beispiele
Im folgenden Beispiel wird die Quell-MySource
auf dem Computer MyServer
erstellt und ein Eintrag in das Ereignisprotokoll MyNewLog
geschrieben.
#using <System.dll>
using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
// Create the source, if it does not already exist.
if ( !EventLog::SourceExists( "MySource", "MyServer" ) )
{
EventLog::CreateEventSource( "MySource", "MyNewLog", "MyServer" );
Console::WriteLine( "CreatingEventSource" );
}
// Create an EventLog instance and assign its source.
EventLog^ myLog = gcnew EventLog;
myLog->Source = "MySource";
// Write an informational entry to the event log.
myLog->WriteEntry( "Writing to event log." );
Console::WriteLine( "Message written to event log." );
}
using System;
using System.Diagnostics;
using System.Threading;
class MySample{
public static void Main(){
// Create the source, if it does not already exist.
if(!EventLog.SourceExists("MySource", "MyServer"))
{
// An event log source should not be created and immediately used.
// There is a latency time to enable the source, it should be created
// prior to executing the application that uses the source.
// Execute this sample a second time to use the new source.
EventLog.CreateEventSource("MySource", "MyNewLog", "MyServer");
Console.WriteLine("CreatingEventSource");
Console.WriteLine("Exiting, execute the application a second time to use the source.");
// The source is created. Exit the application to allow it to be registered.
return;
}
// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySource";
// Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.");
Console.WriteLine("Message written to event log.");
}
}
Imports System.Diagnostics
Imports System.Threading
Class MySample
Public Shared Sub Main()
' Create the source, if it does not already exist.
If Not EventLog.SourceExists("MySource", "MyServer") Then
EventLog.CreateEventSource("MySource", "MyNewLog", "MyServer")
Console.WriteLine("CreatingEventSource")
End If
' Create an EventLog instance and assign its source.
Dim myLog As New EventLog()
myLog.Source = "MySource"
' Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.")
Console.WriteLine("Message written to event log.")
End Sub
End Class
Hinweise
Verwenden Sie diese Überladung, um ein benutzerdefiniertes Protokoll zu erstellen oder eine Source für ein vorhandenes Protokoll auf dem angegebenen Computer zu erstellen und zu registrieren.
Wenn logName
null
oder eine leere Zeichenfolge ("") ist, wenn Sie CreateEventSourceaufrufen, wird das Protokoll standardmäßig im Anwendungsprotokoll gespeichert. Wenn das Protokoll auf dem angegebenen Computer nicht vorhanden ist, erstellt das System ein benutzerdefiniertes Protokoll und registriert Ihre Anwendung als Source für dieses Protokoll.
Sie müssen nur eine Ereignisquelle erstellen, wenn Sie in das Ereignisprotokoll schreiben. Bevor Sie einen Eintrag in ein Ereignisprotokoll schreiben, müssen Sie die Ereignisquelle mit dem Ereignisprotokoll als gültige Ereignisquelle registrieren. Wenn Sie einen Protokolleintrag schreiben, verwendet das System die Source, um das entsprechende Protokoll zu finden, in dem Der Eintrag platziert werden soll. Wenn Sie das Ereignisprotokoll lesen, können Sie entweder das Sourceoder ein Log und MachineNameangeben.
Anmerkung
Um eine Ereignisquelle in Windows Vista und höher oder Windows Server 2003 zu erstellen, müssen Sie über Administratorrechte verfügen.
Der Grund für diese Anforderung ist, dass alle Ereignisprotokolle, einschließlich Sicherheit, durchsucht werden müssen, um festzustellen, ob die Ereignisquelle eindeutig ist. In Windows Vista und höher verfügen Benutzer nicht über die Berechtigung für den Zugriff auf das Sicherheitsprotokoll; daher wird ein SecurityException ausgelöst.
In Windows Vista und höher bestimmt die Benutzerkontensteuerung (User Account Control, UAC) die Berechtigungen eines Benutzers. Wenn Sie Mitglied der Gruppe "Integrierte Administratoren" sind, werden Ihnen zwei Laufzeitzugriffstoken zugewiesen: ein Standardbenutzerzugriffstoken und ein Administratorzugriffstoken. Standardmäßig befinden Sie sich in der Standardbenutzerrolle. Um den Code auszuführen, der auf das Sicherheitsprotokoll zugreift, müssen Sie zuerst Ihre Berechtigungen vom Standardbenutzer zum Administrator erhöhen. Sie können dies tun, wenn Sie eine Anwendung starten, indem Sie mit der rechten Maustaste auf das Anwendungssymbol klicken und angeben, dass Sie als Administrator ausführen möchten.
Verwenden Sie WriteEvent und WriteEntry, um Ereignisse in ein Ereignisprotokoll zu schreiben. Sie müssen eine Ereignisquelle zum Schreiben von Ereignissen angeben; Sie müssen die Ereignisquelle erstellen und konfigurieren, bevor Sie den ersten Eintrag mit der Quelle schreiben.
Erstellen Sie die neue Ereignisquelle während der Installation Ihrer Anwendung. Dadurch kann das Betriebssystem seine Liste der registrierten Ereignisquellen und deren Konfiguration aktualisieren. Wenn das Betriebssystem seine Liste der Ereignisquellen nicht aktualisiert hat und Sie versuchen, ein Ereignis mit der neuen Quelle zu schreiben, schlägt der Schreibvorgang fehl. Sie können eine neue Quelle mithilfe einer EventLogInstallerkonfigurieren oder die CreateEventSource-Methode verwenden. Sie müssen über Administratorrechte auf dem Computer verfügen, um eine neue Ereignisquelle zu erstellen.
Sie können eine Ereignisquelle für ein vorhandenes Ereignisprotokoll oder ein neues Ereignisprotokoll erstellen. Wenn Sie eine neue Quelle für ein neues Ereignisprotokoll erstellen, registriert das System die Quelle für dieses Protokoll, aber das Protokoll wird erst erstellt, wenn der erste Eintrag in das Protokoll geschrieben wird.
Das Betriebssystem speichert Ereignisprotokolle als Dateien. Wenn Sie EventLogInstaller oder CreateEventSource zum Erstellen eines neuen Ereignisprotokolls verwenden, wird die zugeordnete Datei im Verzeichnis %SystemRoot%\System32\Config auf dem angegebenen Computer gespeichert. Der Dateiname wird festgelegt, indem die ersten 8 Zeichen der eigenschaft Log mit der Dateinamenerweiterung ".evt" angefügt werden.
Die Quelle muss auf dem lokalen Computer eindeutig sein; Ein neuer Quellname kann nicht mit einem vorhandenen Quellnamen oder einem vorhandenen Ereignisprotokollnamen übereinstimmen. Jede Quelle kann jeweils nur in ein Ereignisprotokoll schreiben; Ihre Anwendung kann jedoch mehrere Quellen verwenden, um in mehrere Ereignisprotokolle zu schreiben. Ihre Anwendung kann z. B. mehrere Quellen erfordern, die für unterschiedliche Ereignisprotokolle oder unterschiedliche Ressourcendateien konfiguriert sind.
Die Quelle muss entweder für das Schreiben lokalisierter Einträge oder für das Schreiben von direkten Zeichenfolgen konfiguriert werden. Wenn Ihre Anwendung Einträge mit Ressourcenbezeichnern und Zeichenfolgenwerten schreibt, müssen Sie zwei separate Quellen registrieren. Konfigurieren Sie beispielsweise eine Quelle mit Ressourcendateien, und verwenden Sie diese Quelle in der WriteEvent-Methode, um Einträge mithilfe von Ressourcenbezeichnern in das Ereignisprotokoll zu schreiben. Erstellen Sie dann eine andere Quelle ohne Ressourcendateien, und verwenden Sie diese Quelle in der WriteEntry-Methode, um Zeichenfolgen mithilfe dieser Quelle direkt in das Ereignisprotokoll zu schreiben.
Um die Konfigurationsdetails einer vorhandenen Quelle zu ändern, müssen Sie die Quelle löschen und dann mit der neuen Konfiguration erstellen. Wenn andere Anwendungen oder Komponenten die vorhandene Quelle verwenden, erstellen Sie eine neue Quelle mit der aktualisierten Konfiguration, anstatt die vorhandene Quelle zu löschen.
Anmerkung
Wenn eine Quelle bereits einem Protokoll zugeordnet wurde und Sie es einem neuen Protokoll zuordnen, müssen Sie den Computer neu starten, damit die Änderungen wirksam werden.