是否有使用C#
问题描述:
得到崩溃的应用程序的名字从事件日志,我用下面的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:
我可以做一个搜索,找到那个大字符串中的应用程序名称,但有没有更好的办法找到崩溃的应用程序?
答
它看起来像你能做的最好的是Source
财产,但文件表明,它是由日志应用程序,以什么它填充源用:
事件源指明了记录事件。如果应用程序很大,通常应用程序的名称为 或应用程序的子组件的名称通常是 。应用程序和服务通常写入 (因此是应用程序日志或自定义日志的源代码)。 设备驱动程序通常会写入系统日志。
https://msdn.microsoft.com/en-us/library/system.diagnostics.eventlogentry.source(v=vs.110).aspx
这可能是该事件的您正在寻找的是由OS产生正确的类型填充此,也可能不是。
如果您可以保证应用程序始终在英文窗口上运行,则字符串解析将会正常,否则可能会更困难。
您想为您的PC上的所有应用程序执行此操作 – Amit
不适用于某些应用程序,例如所有防病毒应用程序 – user584018
您可以将x.Message按换行符拆分为列表。然后,在该列表中,您可以选择包含Faulting应用程序路径的条目。 – Amit