2017-09-14 3 views
0

Ich verwende unter C# -Code zu erhalten abgestürzt Anwendungsnamen von EventLog,Gibt es eine andere Art und Weise von EventLog abgestürzt Anwendungsnamen C#

EventLog log = new EventLog("Application"); 
var entries = log.Entries.Cast<EventLogEntry>().Reverse().Where(x => (UInt16)x.InstanceId == 1000 && x.EntryType.ToString() == "Error" && x.Source == "Application Error").Select(x => new 
      { 
       x.Message, 
       x.TimeGenerated 

      }).ToList(); 

Das Problem ist x.Message enthält eine große Zeichenfolge mit Anwendungsnamen erhalten verwenden (wmiprvse.exe, Beispiel unten),

Faulting application name: wmiprvse.exe, version: 10.0.10586.0, time stamp: 0x5632d443 
Faulting module name: svrenumapi100.dll, version: 2009.100.1600.1, time stamp: 0x4bb682e9 
Exception code: 0xc0000005 
Fault offset: 0x0003a0bf 
Faulting process id: 0xcdcc 
Faulting application start time: 0x01d32cb6db70fd71 
Faulting application path: C:\windows\sysWOW64\wbem\wmiprvse.exe 
Faulting module path: C:\Program Files (x86)\Microsoft SQL 
Server\100\Shared\svrenumapi100.dll 
Report Id: 7ecb9ccf-40b3-47b3-956e-a8bfbd2ec0f3 
Faulting package full name: 
Faulting package-relative application ID: 

ich eine Suche machen kann Anwendungsnamen innerhalb dieser großen Zeichenfolge zu finden, aber gibt es eine bessere Art und Weise abgestürzt Anwendung zu finden?

+0

Sie möchten dies für alle Anwendungen auf Ihrem PC tun. – Amit

+0

Nein für bestimmte Anwendungen, wie alle Antiviren-Anwendungen – user584018

+0

Sie können die x.Message durch einen Zeilenumbruch in eine Liste aufteilen. In dieser Liste können Sie dann den Eintrag auswählen, der den fehlerhaften Anwendungspfad enthält. – Amit

Antwort

0

Es ist wie die besten sieht man die Source Eigenschaft tun, aber die Dokumentation schlägt vor, dass es bis zur Protokollierung Anwendung ist, was es mit der Quelle auffüllt:

Das zeigt Ereignisquelle, was protokolliert das Ereignis. Es ist oft der Name der Anwendung oder der Name einer Unterkomponente der Anwendung, wenn die Anwendung groß ist. Anwendungen und Dienste schreiben normalerweise das (und sind daher Quellen für) das Anwendungsprotokoll oder ein benutzerdefiniertes Protokoll. Gerätetreiber schreiben normalerweise in das Systemprotokoll.

https://msdn.microsoft.com/en-us/library/system.diagnostics.eventlogentry.source(v=vs.110).aspx

Es könnte sein, dass die Art der Veranstaltung, die Sie suchen durch das Betriebssystem erzeugt wird und diese korrekt auffüllt, oder auch nicht.

Wenn Sie garantieren können, dass die Anwendung immer auf englischsprachigen Fenstern läuft, ist das String-Parser in Ordnung, wenn es nicht ein bisschen schwieriger sein könnte.

Verwandte Themen