Frage

Ich habe code, der liest das Windows-Ereignisprotokoll.Es verwendet OpenEventLog, ReadEventLog und ruft die Ereignisquelle und Ereignis-ID.Dann sieht es aus der Quelle unter dem

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

Schlüssel, lädt die entsprechende DLL(s) nach dem, was aufgeführt ist EventMessageFile und schließlich nutzt FormatMessage das Zusammenführen der Veranstaltung Saiten mit der Meldung DLL-Inhalte zu erhalten, der Finale text der Nachricht ein.Dies ist der empfohlene Weg, und obwohl Sie ein bisschen wie ein Schmerz, es funktioniert Super.

Bis...Ich gehe, Suche die Quelle und finden Sie es nicht ein EventMessageFile, sondern vielmehr ein ProvideGuid Eintrag.Dies scheint der neue Weg (Sie zeigen, bis auf Vista und Windows 2008).Igitt, nichts zu passieren, um FormatMessage zum suchen den Nachrichtentext und das Zusammenführen der Daten-strings

:(

Die Suche in der registry für die guid führt, dass die Verweise zu anderen Dateien (http.sys im Fall des HTTP-Quelle), aber ich kann nie den vollständigen text der Nachricht ein.Tun ich haben zu verwenden diese EvtOpenSession APIs?Ich hoffe nicht, da ich bereits haben die EVENTLOGRECORD* von einem Aufruf zu ReadEventLog, und die Tatsache , dass die software ausgeführt werden muss unter Windows 2003, wo EvtOpenSession nicht unterstützt (nur unter Windows Vista und Windows 2008).HINWEIS:Einige Quellen auf Vista haben ProviderGUID, und andere haben EventMessageFile, so dass die alte Methode noch lebensfähig ist.

Also, was ich bin nach ist ein Weg, um Blick auf die ProviderGuid und Holen Sie sich die DLL übergeben werden muss FormatMessage für die Anzeige der vollständigen Meldung im Ereignisprotokoll text.

Vielen Dank für jede Eingabe

War es hilfreich?

Lösung

Die APIs, Richard von links, die für die neue Stil-Eventing-system (code-named Crimson, manchmal auch als Manifest-Basierte Provider) eingeführt Vista/Server 2K8.Eines der Artefakte dieses neue system ist die neue APIs zu verwenden diese Protokolle, ein anderer ist die ProviderGuid Schlüssel für bestimmte EventSources produzieren, die Ereignisse, die mit diesem neuen Rahmen.

Ich glaube, Sie sollten die Funktionen auf Windows Vista später zu konsumieren diese Protokolle, es sollte in der Lage die für Sie arbeiten.Sie können die EvtFormatMessage Methode zum formatieren der Saiten.Ich glaube, diese APIs werden auch Lesen Sie die Ereignisse produziert von "Klassischen" Anbietern.

Wenn Sie konsumieren diese Nachrichten aus .Die NETTO-app können Sie Typen im System.Diagnose.Eventing.Reader-namespace eingeführt .NET 3.5.

Andere Tipps

Es gibt Win32-APIs zum Lesen/ausbau Ereignis-log-Einträge.

Siehe MSDN: http://msdn.microsoft.com/en-us/library/aa385780(VS.85).aspx

Alles andere, und Sie sind wahrscheinlich zu finden, die Probleme mit patches, geschweige denn, Servicepacks oder neue Versionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top