none
Prozess überwachen - ob Problem festgestellt wurde und das Programm beendet wurde RRS feed

  • 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

    Montag, 17. Oktober 2011 07:06

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-5bc7cb40594a

    Gruß
    Marcel


    Montag, 17. Oktober 2011 08:35
    Moderator
  • 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

     


    Montag, 17. Oktober 2011 09:07

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-5bc7cb40594a

    Gruß
    Marcel


    Montag, 17. Oktober 2011 08:35
    Moderator
  • 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

     


    Montag, 17. Oktober 2011 09:07
  • Thank you @ll.

     

    Das hilft mir schon mal weiter!!

    Montag, 17. Oktober 2011 11:39