Schreiben von Einträgen in ein Ereignisprotokoll mithilfe von Visual C++
In diesem Artikel wird beschrieben, wie Sie ihre eigenen Einträge mithilfe der Microsoft .NET Framework zum Ereignisprotokoll des Betriebssystems hinzufügen.
Originalversion des Produkts: Visual C++
Ursprüngliche KB-Nummer: 815661
Anforderungen
Visual Studio .NET
Schreiben von Einträgen in ein Ereignisprotokoll
Die Ereignisprotokollierung bietet eine standardisierte, zentralisierte Möglichkeit für Ihre Anwendungen, wichtige Software- und Hardwareereignisse aufzuzeichnen. Windows stellt eine Standardbenutzeroberfläche zum Anzeigen der Protokolle zur Ereignisanzeige. Mithilfe der Common Language-Laufzeit-EventLog-Komponente können Sie ganz einfach eine Verbindung mit vorhandenen Ereignisprotokollen auf lokalen und Remotecomputern 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:
Starten Sie Visual Studio .NET.
Erstellen Sie ein neues Visual C++ Managed C++-Anwendungsprojekt.
Fügen Sie einen Verweis auf system.dll hinzu, indem Sie dem Code die folgende Zeile hinzufügen:
#using <system.dll>Verwenden Sie die
usingDirektive für dieSystemundSystem::DiagnosticsNamespaces, damit Sie später im Code keine Deklarationen aus diesen Namespaces qualifizieren müssen. Sie können die folgenden Anweisungen vor anderen Deklarationen verwenden:using namespace System; using namespace System::Diagnostics;Zum Schreiben in ein Ereignisprotokoll benötigen Sie mehrere Informationen:
- 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 einzigen 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");Verwenden Sie zwei statische Methoden der
EventLogKlasse, um zu überprüfen, ob die 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 derCreateEventSourceMethode keinen Protokollnamen angeben, heißt die Protokolldatei standardmäßig "Anwendungsprotokoll".if(!EventLog::SourceExists(sSource)) EventLog::CreateEventSource(sSource,sLog);Um eine Nachricht in ein Ereignisprotokoll zu schreiben, können Sie die statische Methode
EventLog.WriteEntryverwenden. Diese Methode hat mehrere verschiedene überladene Versionen. Der folgende Beispielcode zeigt die einfachste Methode (die eine Quellzeichenfolge und Ihre Nachricht akzeptiert) und eine der komplexeren Methoden (die die Angabe der Ereignis-ID und des Ereignistyps unterstützt):EventLog::WriteEntry(sSource,sEvent); EventLog::WriteEntry(sSource, sEvent, EventLogEntryType::Warning, 235);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;
}