2017-09-14 76 views
0

得到崩潰的應用程序的名字從事件日誌,我用下面的C#代碼的任何其他方式來獲得墜毀事件日誌應用程序名稱,是否有使用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(); 

的問題是x.Message包含一個大的字符串與應用程序名稱( wmiprvse.exe,下面的例子),

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: 

我可以做一個搜索,找到那個大字符串中的應用程序名稱,但有沒有更好的辦法找到崩潰的應用程序?

+0

您想爲您的PC上的所有應用程序執行此操作 – Amit

+0

不適用於某些應用程序,例如所有防病毒應用程序 – user584018

+0

您可以將x.Message按換行符拆分爲列表。然後,在該列表中,您可以選擇包含Faulting應用程序路徑的條目。 – Amit

回答

0

它看起來像你能做的最好的是Source財產,但文件表明,它是由日誌應用程序,以什麼它填充源用:

事件源指明瞭記錄事件。如果應用程序很大,通常應用程序的名稱爲 或應用程序的子組件的名稱通常是 。應用程序和服務通常寫入 (因此是應用程序日誌或自定義日誌的源代碼)。 設備驅動程序通常會寫入系統日誌。

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

這可能是該事件的您正在尋找的是由OS產生正確的類型填充此,也可能不是。

如果您可以保證應用程序始終在英文窗口上運行,則字符串解析將會正常,否則可能會更困難。