Lesen Ereignisprotokoll aus der Ferne mit .NET
Will ich aber Lesen Sie das Ereignisprotokoll auf einem remote-computer überprüfen, auf Fehler während der Tests. Hier einige relevante 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;
}
Derzeit ist dieser code löst eine Ausnahme (Versucht, einen nicht autorisierten Vorgang auszuführen). Nach MSDN, ich brauche EventLogPermission, aber ich kämpfen, um zu finden, Beispiele dafür, wie um diese Berechtigung zu verwenden. Hat jemand ein Beispiel, wie dies zu tun?
Edit: Antwort auf Kommentare
Danke Euch allen für die Kommentare - hier ist der zusätzliche Informationen angefordert werden:
Ausnahme geworfen wird, aus der foreach
- Anweisung. Speziell, wenn man durch den code geworfen, im Schritt nach, wenn in
markiert ist. Es scheint, dass ich war in der Lage, erstellen Sie den Ereignis-log-Objekt, aber ich bin nicht in der Lage, den Zugriff auf die Einträge im Ereignisprotokoll.
Mein Konto nicht über die Berechtigung zum Lesen der event-log auf dem Ziel-system, aber ich habe die Anmeldeinformationen für ein Konto die nicht. Wenn Sie die Verbindung manuell über die Ereignisanzeige, dort wird die option als anderer Benutzer verbinden. Nachdem ich diese manuell, dann wird mein code lief ohne ein problem. Aber, ich kann nicht verlassen, es manuell zu tun, jedes mal, wenn dieses Programm ausgeführt wird. Was ich brauche ist ein Weg um sich als anderer Benutzer verbinden programmaticly. Ich dachte, dass die EventLogPermission
wäre die Möglichkeit, das zu tun, aber vielleicht gibt es einen anderen Weg. Wenn jemand weiß, wie man eine Verbindung zu einem remote-log als ein anderer Benutzer in C#, das wäre genau das was ich suchte.
- Welche Linie wirft die Ausnahme? Der MSDN Artikel sagt nur, dass Sie die Erlaubnis benötigen, zu schreiben-es sagt nichts darüber Lesen.
- Hat Ihr Benutzerkonto über die Berechtigung zum Lesen der event-log auf dem remote-Rechner? Öffnen Sie die Ereignisanzeige und versuchen Sie eine Verbindung zu dem remote-computer von Ihrem Computer zu überprüfen.
- Ich versuche nur den code und Protokolle von remote-server. Alles funktioniert einwandfrei.
- Danke @Frank, @Stefan und @Polaris für Ihre Kommentare. Ich habe aktualisiert die Frage mit den zusätzlichen Informationen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
WMI ist unglaublich nützlich für diese, ein snippet wie
Ihnen erlauben würde, die Abfrage der Protokolle. Dieses Dienstprogramm von MS zulassen wird, Sie zu erkunden, WMI und wird auch bauen die .net-code aufrufen, der fragt.
Ein weiterer Vorteil ist, dass sein gehen, um all die Ereignisse und bringen Sie Sie lokal auf die Anwendung, wo Sie können, analysieren Sie in Ihrer Freizeit. Durchlaufen der Ereignisse in der Weise, die Sie jetzt machen, ist anfällig für Fehler, wenn die Verbindung unterbrochen wird, während der Verarbeitung (übrigens das ist die gleiche Methode, die in der Regel eingesetzt werden, mit Zugriff auf die Datenbank).
Danke an alle die Kommentare zu dieser Frage. Sobald ich merkte, dass die Berechtigungen möglicherweise nicht ein Teil sein soll .NET aber Teil von Windows in die Ereignisanzeige selbst, ich hatte ein paar neue Richtung für meine eigenen Recherchen.
Sieht es aus wie ein "net use" - Befehl war alles, was nötig war, um die Verbindung zwischen meinem lokalen computer und dem remote-computer. Beim Aufruf von "net use", bevor Sie mit dem code, den ich gepostet in die Frage, alles funktioniert wunderbar. Es ist einfach genug, um zu rufen, dass aus dem code vor dem Lesen aus dem Ereignisprotokoll.
Danke nochmal für Eure Hilfe!
net use
aus dem code? Ich habe eine harte Zeit der Suche nach diesem.