2011-03-15 2 views
8

Je veux lire le journal des événements sur un ordinateur distant pour vérifier les erreurs lors des tests. Voici un code pertinent:Lire le journal des événements à distance avec .NET

public bool CheckEventLogs(DateTime start) 
{ 
    EventLog myEventLog = new EventLog("CustomLog", "ServerName"); 
    bool errorFound = false; 
    foreach (EventLogEntry entry in myEventLog.Entries) 
    { 
    if (entry.EntryType == EventLogEntryType.Error && entry.TimeGenerated >= start) 
    { 
     Console.WriteLine("Error in Event Log:\n" + entry.Message + "\n"); 
     errorFound = true; 
    } 
    } 
    return errorFound; 
} 

Actuellement, ce code génère une exception (tentative d'effectuer une opération non autorisée). Selon MSDN, j'ai besoin d'EventLogPermission, mais j'ai eu du mal à trouver des exemples d'utilisation de cette permission. Quelqu'un at-il un exemple de comment faire cela?

Edit: Réponse aux commentaires

Merci à tous pour les commentaires - voici les informations complémentaires demandées:

L'exception est levée de la déclaration foreach. Plus précisément, lorsque vous passez le code à l'étape suivante, in est mis en surbrillance. Il semble que j'ai été capable de créer l'objet du journal des événements, mais je ne suis pas en mesure d'accéder aux entrées dans le journal des événements.

Mon compte n'a pas l'autorisation de lire le journal des événements sur le système cible, mais j'ai des informations d'identification pour un compte qui le fait. Lors de la connexion manuelle à travers l'observateur d'événements, il existe une option pour se connecter en tant qu'un autre utilisateur. Après l'avoir fait manuellement, mon code s'est exécuté sans problème. Cependant, je ne peux pas compter le faire manuellement chaque fois que ce programme s'exécute. Ce dont j'ai besoin, c'est d'un moyen de se connecter comme un autre utilisateur programmatique. Je pensais que le EventLogPermission serait le moyen de le faire, mais il y a peut-être un autre moyen. Si quelqu'un sait comment se connecter à un journal distant en tant qu'utilisateur différent en C#, ce serait exactement ce que je cherchais.

+1

Quelle ligne renvoie l'exception? L'article MSDN dit seulement que vous avez besoin de la permission d'écrire - il ne dit rien sur la lecture. – Gabe

+1

Votre compte utilisateur est-il autorisé à lire le journal des événements sur la machine distante? Ouvrez l'Observateur d'événements et essayez de vous connecter à l'ordinateur distant à partir de votre ordinateur pour vérifier. –

+0

Je viens d'essayer votre code et obtenir des journaux du serveur distant. Tout fonctionne bien. – Polaris

Répondre

2

Merci à tous ceux qui ont fourni des commentaires sur cette question. Une fois que je me suis rendu compte que les permissions ne faisaient peut-être pas partie de .NET mais faisaient partie de Windows et de l'Event Viewer lui-même, j'avais une nouvelle direction pour mes propres investigations.

Il semble qu'une commande «net use» ait suffi pour établir la connexion entre mon ordinateur local et l'ordinateur distant. Lorsque j'appelais "net use" avant d'utiliser le code que j'avais posté dans la question, les choses fonctionnaient à merveille. Il est assez simple de l'appeler à partir du code avant de lire le journal des événements.

Merci encore pour votre aide!

+0

Pouvez-vous poster le code qui a fonctionné pour vous. – Praneeth

+0

Je pense que le code d'origine que j'ai posté dans la question avait fonctionné après que j'ai couru une commande «net use» pour établir la connexion entre mon ordinateur local et l'ordinateur distant. – Brian

+0

Pourriez-vous nous montrer comment avez-vous utilisé l'utilisation de votre code? J'ai du mal à trouver ça. – snippetkid

6

WMI est incroyablement utile pour cela, un extrait comme

SELECT Logfile,TimeGenerated,Type,SourceName,Message FROM Win32_NTLogEvent 

vous laisserais d'interroger les journaux. This utility de MS vous permettra d'explorer WMI et construira même le code .net pour invoquer les requêtes.

Un autre avantage à cela est qu'il va obtenir tous les événements et les amener à l'application locale où vous pouvez les analyser à votre guise. L'itération des événements comme vous le faites maintenant est sujette à l'échec si la connexion est interrompue pendant que vous traitez (d'ailleurs, c'est la même méthode que celle utilisée généralement avec l'accès à la base de données).

Questions connexes