Benutzer mit den meisten Antworten
Prozess überwachen - ob Problem festgestellt wurde und das Programm beendet wurde

Frage
-
Hallo,
Ich habe auf einem Server verschiedenste Programme laufen. Da diese von Client-PCs aus mit verschiedenen Parametern gestartet werden können, können diese auch Fehler enthalten. Dann beendet sich so ein Programm ja und bringt folgende Meldung:
Programm hat ein Problem festgestellt und muss beendet werden.
Ich möchte mit einem zusätzlichen Programm das ich laufen lasse überprüfen ob ein Programm eben ein solches Problem beinhaltet und will dann eine Meldung in eine Datenbank schreiben. Diese Meldungen werden von einem bereits bestehenden Programm das auf den Client-Rechnern der Administratoren läuft gelesen und dann dem Administrator gemeldet, dass er am Server eingreifen kann.
Da allerdings Programme, die diese Meldung bringen nicht als "Programm reagiert nicht" geführt werden, ist jetzt mein Problem wie ich überprüfen kann ob ein Programm eben auf diese Art und Weise beendet wurde.
Gibt es da eine möglichkeit??
VIELEN DANK schon mal!!!!
Gruß
Matthias
Antworten
-
Hallo Matthias,
Normalerweise werden solche Fehler im Ereignisprotokoll des Systems automatisch protokolliert.
Dort findest Du im Fall eines "Programm reagiert nicht"-Absturzes Einträge wie z.B.:Application: Test.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.IO.FileNotFoundException Stack: at XXX.ADHelper.OnStartAction() at XXX.Program.Main(System.String[])
Es gibt eine ganze Reihe von Monitoring Tools, wie EventSentry, die u.a. solche Ausnahmen automatisch per E-Mail an den Administrator etc. verschicken können.Edit: Manchmal kann es sich als hilfreich erweisen, vor allem bei unbeaufsichtigten Ausführungen von Anwendungen, das "Programm reagiert nicht"-Dialog gar nicht erst anzeigen zu lassen. Siehe dazu die Diskussion unter:
http://social.msdn.microsoft.com/Forums/en/clr/thread/7ab1d033-242a-40bd-8699-5bc7cb40594aGruß
Marcel- Bearbeitet Marcel RomaModerator Montag, 17. Oktober 2011 08:50
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:12
-
Hallo Mathias,
Also ich gebe Marcel da recht erfinde das rad nicht neu. Für solche aufgaben gibt es reichlich Lösungen. Wenn du aber trotzdem aus interesse oder weil die Lösungen nicht deinen ansprüchen genügen das selber implementieren möchtest dann ist die Klasse System.Diagnostics.Process die die du brauchst.
Du könntest z.B. mal einfach getProcesses aufrufen. Damit hättest du dann eine Liste aller Processe und wenn du dir dann die Instanzen anguckst stellst du fest das du eigenschaften wie "StandardError hast. Und ein Event ErrorDataReceived. Guck dir die Klasse genauer an und Experimentiere damit ein bisschen.
Dann kommst du recht schnell zum gewünschten Ergebnis.
Die Klasse bietet sowieso viele sehr schöne member:
http://msdn.microsoft.com/de-de/library/system.diagnostics.process_members%28v=vs.80%29.aspx
Grüße,
Sniper
- Bearbeitet sniper369 Montag, 17. Oktober 2011 11:36
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:12
Alle Antworten
-
Hallo Matthias,
Normalerweise werden solche Fehler im Ereignisprotokoll des Systems automatisch protokolliert.
Dort findest Du im Fall eines "Programm reagiert nicht"-Absturzes Einträge wie z.B.:Application: Test.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.IO.FileNotFoundException Stack: at XXX.ADHelper.OnStartAction() at XXX.Program.Main(System.String[])
Es gibt eine ganze Reihe von Monitoring Tools, wie EventSentry, die u.a. solche Ausnahmen automatisch per E-Mail an den Administrator etc. verschicken können.Edit: Manchmal kann es sich als hilfreich erweisen, vor allem bei unbeaufsichtigten Ausführungen von Anwendungen, das "Programm reagiert nicht"-Dialog gar nicht erst anzeigen zu lassen. Siehe dazu die Diskussion unter:
http://social.msdn.microsoft.com/Forums/en/clr/thread/7ab1d033-242a-40bd-8699-5bc7cb40594aGruß
Marcel- Bearbeitet Marcel RomaModerator Montag, 17. Oktober 2011 08:50
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:12
-
Hallo Mathias,
Also ich gebe Marcel da recht erfinde das rad nicht neu. Für solche aufgaben gibt es reichlich Lösungen. Wenn du aber trotzdem aus interesse oder weil die Lösungen nicht deinen ansprüchen genügen das selber implementieren möchtest dann ist die Klasse System.Diagnostics.Process die die du brauchst.
Du könntest z.B. mal einfach getProcesses aufrufen. Damit hättest du dann eine Liste aller Processe und wenn du dir dann die Instanzen anguckst stellst du fest das du eigenschaften wie "StandardError hast. Und ein Event ErrorDataReceived. Guck dir die Klasse genauer an und Experimentiere damit ein bisschen.
Dann kommst du recht schnell zum gewünschten Ergebnis.
Die Klasse bietet sowieso viele sehr schöne member:
http://msdn.microsoft.com/de-de/library/system.diagnostics.process_members%28v=vs.80%29.aspx
Grüße,
Sniper
- Bearbeitet sniper369 Montag, 17. Oktober 2011 11:36
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 8. November 2011 14:12