Freigeben über


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

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

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

Anforderungen

Visual Studio .NET

Schreiben von Einträgen in ein Ereignisprotokoll

Die Ereignisprotokollierung bietet eine standardisierte, zentrale Möglichkeit für Ihre Anwendungen, wichtige Software- und Hardwareereignisse aufzuzeichnen. Windows stellt eine Standardbenutzeroberfläche zum Anzeigen der Protokolle zur Seite: die Ereignisanzeige. Mithilfe der Laufzeitkomponente "EventLog" für die gemeinsame Sprache können Sie problemlos eine Verbindung mit vorhandenen Ereignisprotokollen auf lokalen und Remotecomputern herstellen und Einträge in diese Protokolle schreiben. Sie können einträge auch aus vorhandenen Protokollen lesen und eigene benutzerdefinierte Ereignisprotokolle erstellen. In ihrer 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++-Verwaltetes C++-Anwendungsprojekt.

  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 Direktive für die System Namespaces, System::Diagnostics damit Sie Deklarationen von diesen Namespaces später in Ihrem Code nicht qualifizieren müssen. Sie können die folgenden Anweisungen vor anderen Deklarationen verwenden:

    using namespace System;
    using namespace System::Diagnostics;
    
  5. Zum Schreiben in ein Ereignisprotokoll müssen mehrere Informationen vorhanden sein:

    • Ihre Nachricht
    • Der Name des Protokolls, in das 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 ob die Quelle nicht vorhanden ist, um diese Quelle zu erstellen, die einem bestimmten Ereignisprotokoll zugeordnet ist. Wenn der angegebene Protokollname nicht vorhanden ist, wird der Name automatisch erstellt, wenn Sie Ihren ersten Eintrag in das Protokoll schreiben. Wenn Sie der Methode standardmäßig keinen Protokollnamen CreateEventSource angeben, heißt die Protokolldatei "Anwendungsprotokoll".

    if(!EventLog::SourceExists(sSource)) EventLog::CreateEventSource(sSource,sLog);
    
  7. Zum Schreiben einer Nachricht in ein Ereignisprotokoll 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 die Anwendung bei der Ereignisanzeige, 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;
}