Freigeben über


EventLog.CreateEventSource Methode

Definition

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 messageFileverwendet 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 sourceDataSource, 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 logNamenull 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 MyServererstellt und ein Eintrag in das Ereignisprotokoll MyNewLoggeschrieben.

#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 logNamenull 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.

Weitere Informationen

Gilt für: