Lire Journal des Événements à Distance .NET
Je veux lire le Journal des Événements sur un ordinateur distant pour vérifier les erreurs pendant le test. Voici quelques code:
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 (Tenté d'effectuer une opération non autorisée). Selon MSDN, j'ai besoin de EventLogPermission, mais j'ai eu du mal à trouver des exemples d'utilisation de cette autorisation. Quelqu'un aurait-il un exemple de comment faire cela?
Edit: Réponse aux Commentaires
Merci à tous pour les commentaires - ici est le complément d'information demandé:
L'exception est générée à partir de la foreach
déclaration. Plus précisément, lorsque vous exécutez le code jeté dans l'étape d'après, quand in
est mis en surbrillance. Il semble que j'ai été capable de créer le journal des événements de l'objet mais je ne suis pas en mesure d'accéder à des entrées dans le journal des événements.
Mon compte n'est pas autorisé à lire le journal des événements sur le système cible, mais j'ai des informations pour un compte qui ne. Lors de la connexion manuellement par l'intermédiaire de l'observateur d'événements, il ya une option pour se connecter en tant qu'un autre utilisateur. Après le faire manuellement, mon code a fonctionné sans problème. Cependant, je ne peut pas se fier à le faire manuellement à chaque fois que ce programme fonctionne. Ce dont j'ai besoin est un moyen de se connecter en tant qu'un autre utilisateur programmaticly. Je pensais que le EventLogPermission
serait la façon de le faire, mais peut-être il ya une autre façon. Si quelqu'un sait comment faire pour se connecter à distance à un journal comme un autre utilisateur en C#, ce serait exactement ce que je cherchais.
Est-ce que votre compte d'utilisateur autorisé à lire le journal des événements sur l'ordinateur distant? Ouvrez l'Observateur d'Événements et essayez de vous connecter à l'ordinateur distant à partir de votre ordinateur pour vérifier.
Je viens d'essayer ton code et obtenir les journaux de serveur distant. Tout fonctionne très bien.
Merci @Gabe, Stefan @et @Polaris pour vos commentaires. J'ai mis à jour la question avec les informations supplémentaires.
OriginalL'auteur Brian | 2011-03-15
Vous devez vous connecter pour publier un commentaire.
WMI est incroyablement utile pour cela, un extrait de comme
Vous permettra d'interroger les journaux. Cet utilitaire à partir de MS vous permettra d'explorer WMI et sera même construire la .net code pour appeler les requêtes.
Un autre avantage, c'est que sa va obtenir tous les événements et de les amener local à l'application dans laquelle vous pouvez analyser à loisir. En itérant les événements dans la façon dont vous le faites maintenant est vouée à l'échec si la connexion est interrompue pendant que vous traitez (d'ailleurs c'est la même méthode qui est typiquement utilisé avec base de données access).
OriginalL'auteur StingyJack
Merci à tous ceux qui ont fourni des commentaires sur cette question. Une fois que j'ai réalisé que les autorisations ne pourrait pas être une partie de .NET, mais une partie de Windows et de l'Observateur d'Événements de lui-même, j'ai eu un nouveau sens à ma propre enquête.
Il ressemble à un "net use" commande était tout ce qui était nécessaire pour établir la connexion entre un ordinateur local et l'ordinateur distant. Lors de l'appel de "net use" avant d'utiliser le code que j'ai posté dans la question, les choses fonctionnaient à merveille. Il est assez simple de l'appeler à partir du code, avant la lecture du journal des événements.
Merci encore pour votre aide!
Je pense que le code d'origine que j'ai posté dans la question avait travaillé après j'ai couru une commande net use pour établir la connexion entre un ordinateur local et l'ordinateur distant.
Pourriez-vous nous montrer comment avez-vous utilisé
net use
à partir de votre code? Je vais avoir un moment difficile de trouver cela.Notre code utilise des bibliothèques de classes qui ne sont pas faciles à partager, mais, fondamentalement, nous utilisons des .NET Annuaire.N'existe pour vérifier si nous pouvons accéder à un répertoire partagé sur le serveur distant. Répertoire.Existe renvoie false, alors que nous utilisons .NET de la classe de Processus à exécuter net.exe (nous retrouvons l'emplacement de net.exe à l'aide de l'Environnement.SystemDirectory).
OriginalL'auteur Brian