Schreiben von Einträgen in ein Ereignisprotokoll mithilfe von Visual C++

In diesem Artikel wird beschrieben, wie Sie dem Ereignisprotokoll des Betriebssystems mithilfe des Microsoft-.NET Framework eigene Einträge hinzufügen.

Ursprüngliche Produktversion: Visual C++
Ursprüngliche KB-Nummer: 815661

Anforderungen

Visual Studio .NET

Schreiben von Einträgen in ein Ereignisprotokoll

Die Ereignisprotokollierung bietet eine zentralisierte Standardmethode für Ihre Anwendungen, um wichtige Software- und Hardwareereignisse aufzuzeichnen. Windows stellt eine Standardbenutzeroberfläche zum Anzeigen der Protokolle bereit: die Ereignisanzeige. Mithilfe der Common Language Runtime EventLog-Komponente können Sie problemlos auf lokalen und Remotecomputern eine Verbindung mit vorhandenen Ereignisprotokollen herstellen und Einträge in diese Protokolle schreiben. Sie können auch Einträge aus vorhandenen Protokollen lesen und eigene benutzerdefinierte Ereignisprotokolle erstellen. In seiner einfachsten Form umfasst das Schreiben in ein Ereignisprotokoll mehrere Schritte zum Erstellen einer Beispielanwendung.

Gehen Sie dazu wie folgt vor:

  1. Starten Sie Visual Studio .NET.

  2. Erstellen Sie ein neues Visual C++-Projekt für eine verwaltete C++-Anwendung.

  3. Fügen Sie einen Verweis auf system.dll hinzu, indem Sie dem Code die folgende Zeile hinzufügen:

    #using <system.dll>
    
  4. Verwenden Sie die using -Anweisung für die System Namespaces und System::Diagnostics , damit Sie Deklarationen aus diesen Namespaces später in Ihrem Code nicht qualifizieren müssen. Sie können die folgenden Anweisungen vor allen anderen Deklarationen verwenden:

    using namespace System;
    using namespace System::Diagnostics;
    
  5. Um in ein Ereignisprotokoll schreiben zu können, benötigen Sie mehrere Informationen:

    • Ihre Nachricht
    • Der Name des Protokolls, in den Sie schreiben möchten (es wird erstellt, wenn es noch nicht vorhanden ist)
    • Eine Zeichenfolge, die die Quelle des Ereignisses darstellt.

    Sie können eine bestimmte Quelle nur mit einem einzelnen Ereignisprotokoll registrieren. Wenn Sie Nachrichten in mehrere Protokolle schreiben möchten, müssen Sie mehrere Quellen definieren.

    String^ sSource;
    String^ sLog;
    String^ sEvent;
    
    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");
    
  6. Verwenden Sie zwei statische Methoden der EventLog -Klasse, um zu überprüfen, ob Ihre Quelle vorhanden ist, und wenn die Quelle nicht vorhanden ist, um diese Quelle zu erstellen, die einem bestimmten Ereignisprotokoll zugeordnet ist. Wenn der von Ihnen angegebene Protokollname nicht vorhanden ist, wird der Name automatisch erstellt, wenn Sie Ihren ersten Eintrag in das Protokoll schreiben. Wenn Sie keinen Protokollnamen für die CreateEventSource Methode angeben, heißt die Protokolldatei standardmäßig Anwendungsprotokoll.

    if(!EventLog::SourceExists(sSource)) EventLog::CreateEventSource(sSource,sLog);
    
  7. Um eine Nachricht in ein Ereignisprotokoll zu schreiben, können Sie die statische Methode EventLog.WriteEntryverwenden. Diese Methode verfügt über mehrere verschiedene überladene Versionen. Der folgende Beispielcode zeigt die einfachste Methode (die eine Quellzeichenfolge und Ihre Nachricht akzeptiert) und eine der komplexeren Methoden (die das Angeben der Ereignis-ID und des Ereignistyps unterstützt):

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent, EventLogEntryType::Warning, 235);
    
  8. Speichern Sie Ihre Anwendung. Führen Sie Ihre Anwendung aus, und überprüfen Sie dann, ob sich die Anwendung im Ereignisanzeige anmeldet, um Ihre neuen Ereignisse anzuzeigen.

Vollständige Codeauflistung in Visual C++ .NET

#include <tchar.h>
#using <system.dll>
#using <mscorlib.dll>

using namespace System;
using namespace System::Diagnostics;

int _tmain()
{
    String^ sSource;
    String^ sLog;
    String^ sEvent;

    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");

     if(!EventLog::SourceExists(sSource))
       EventLog::CreateEventSource(sSource,sLog);

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent,
    EventLogEntryType::Warning, 234);
    return 0;
}