Je dois écrire une application pour saisir le journal des événements pour système / applications. L'autre exigence est que j'ai besoin de lire le journal des événements chaque minute ou de saisir les nouvelles journaux d'événements depuis que je lis la dernière fois. Je envisage actuellement d'utiliser C # pour implémenter au lieu de C ++. P>
Avec cela, j'ai lu plusieurs pages Web et si je comprends bien correctement, je peux utiliser la classe WMI ou EventLog pour lire le journal des événements. Il me semble que je peux être averti lorsque le nouveau journal des événements est ajouté à l'aide de la classe EventLog, mais je n'étais pas sûr que c'est mieux que d'utiliser WMI. Si ma compréhension est correcte, j'aimerais savoir de quelle manière je devrais prendre? P>
S'il vous plaît donnez-moi des conseils. Merci. P>
3 Réponses :
WMI est de la merde. Il utilise des charges de la mémoire et les « événements » sont réalisés par l'interne vote. Vous pouvez même définir l'intervalle de sondage. Vous êtes beaucoup mieux d'utiliser la classe EventLog de .NET. Mais si vous avez besoin de lire tous les journaux de Windows Vista + vous devez utiliser le EventLogReader où vous pouvez lire les événements qui définissent les événements non via un fichier dll de message situé sous
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\EventLogName\EventSourceName\EventMessageFile
Je sais que cela est long après le poste d'origine, mais j'espère que cela est utile aux futurs chercheurs comme moi qui ont trouvé la classe EventLog trop lente. Voici quelques codes pour démontrer les événements de démarrage du système les plus récents:
var entry = (from EventLogEntry e in ev.Entries where (e.InstanceId == 12) && e.TimeGenerated >= fromDate orderby e.TimeGenerated select e).LastOrDefault();
Cette méthode est rapide. Merci.
@Ian, j'ai exécuté votre code pour un ordinateur distant en modifiant le constructeur par défaut EventLog vers EventLog ("Security", "RemoteMachinName", "RAISEPIP"). Dans le débogueur, j'ai vu que la machine distante a écrit près de 250000 entrées pour une seule journée. Et la boucle à travers toutes les personnes a pris 10 minutes de temps, veuillez suggérer s'il y a un meilleur moyen de boucler via des journaux d'événement Emachine distants.
@Ian, j'ai vu EventLogentry auditeurs..mais jusqu'où cela réalisable et correct pour un ordinateur distant EventLog. Demandez-vous de bien partager vos idées. Merci!
Vérifiez les classes dans le système d'espace de noms.diagnostiques.venting (et plus profonds) plutôt que d'utiliser la classe EventLog. P>
Lorsque vous accédez à un ordinateur distant (peut-être juste à Vista et ultérieurement) à l'aide de la classe EventLog, l'ordinateur distant génère environ 6 entrées d'audit de sécurité lorsque vous vous connectez aux journaux, et une autre entrée ou 2 chaque fois que vous récupérez un enregistrement de journal dans un boucle. p>
Mais avec l'événement EventLogQuery / EventLogWatcher / EventLogwatcher, vous pouvez créer une EventLogSession qui vous permet de vous connecter. Et vous pouvez récupérer des entrées spécifiques à l'aide d'une requête XPath, tandis que EventLog vous oblige à itérer sur toutes les entrées pour trouver une entrée. P>
http: // msdn. microsoft.com/en-us/library/bb671200.aspx p>
AVERTISSEMENT: Pour obtenir le message d'événement, la méthode EventLogRecord.FormatDescription () est Hit-ou-Miss, et le niveau de propriétéDisplayName est également frappé. Pour cette raison, je retourne à la classe EventLog pour récupérer les entrées et utiliser l'EventLogwatcher pour regarder des entrées. P>