2017-09-14 2 views
0

J'utilise sous le code C# pour obtenir écrasé nom de l'application de EventLog,est-il un autre moyen de s'écrasé nom de l'application de EventLog en utilisant 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(); 

Le problème est x.Message contient une grande chaîne avec le nom de l'application (wmiprvse.exe, exemple ci-dessous),

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: 

Je peux faire une recherche pour trouver le nom de l'application dans cette grande chaîne, mais est-il une meilleure façon de trouver une application accidentée?

+0

Vous voulez le faire pour toutes les applications sur votre PC – Amit

+0

non pour certaines applications, comme toutes les applications antivirus – user584018

+0

Vous pouvez diviser le caractère x.Message par newline dans une liste. Ensuite, dans cette liste, vous pouvez sélectionner l'entrée contenant le chemin d'application Faulting. – Amit

Répondre

0

Il semble que le mieux que vous pouvez faire est la propriété Source, mais la documentation indique qu'il appartient à l'application de l'exploitation forestière à ce qu'elle remplit la source avec:

La source de l'événement indique que connecté l'événement. C'est souvent le nom de l'application ou le nom d'un sous-composant de l'application si l'application est grande. Les applications et les services écrivent généralement à (et sont donc des sources pour) le journal des applications ou un journal personnalisé. Les pilotes de périphérique écrivent généralement dans le journal système.

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

Il est peut-être que le type d'événement que vous recherchez est généré par le système d'exploitation et renseigne correctement cela, ou il ne pourrait pas.

Si vous pouvez garantir que l'application s'exécute toujours sur les fenêtres de la langue anglaise, l'analyse de la chaîne sera OK, sinon ce pourrait être un peu plus difficile.