Programm Absturz Nachricht



  • Wie bekomme ich es hin, von einem externen Programm das z.B. mit CreateProcess oder ShellExecute gestartet wurde, mitzubekommen ob es abgestürtzt ist ?

    Ein einfaches Prüfen ob die Datei läuft reicht leider nicht, da sie leider noch läuft auch wenn sie abstürtz.



  • Falls Du den Source-Code der gestarteten Anwendung hast, wuerde ich vorschlagen, dort einen SEH Handler einzubauen (fuer Prozessor-Exceptions), und dann z.B. eine Datei zu schreiben.

    Ansonsten wird es schwierig, da Windows ueber den Exception-Zustand eines Prozesses nicht Buch fuehrt. Das einzige mir bekannte Betriebssystem, das das tut, ist AmigaOS, dort kann man "unsauber" die Task-Struktur eines Prozesses auslesen, um zu sehen, ob ein Exception-Statusbit gesetzt ist.

    (EDIT: guck mal in die Dokumentation der ToolHelp-Library. Moeglicherweise kannst Du die Anwendung im Debug-Modus ausfuehren, wobei Dein Prozess als Debugger fungiert)



  • ist zwar ne unsaubere und auch nicht getestete idee.. und wird bestimmt auch nicht bei allen programmen funktionieren, da nicht alle als anwendung in der taskleiste drin sind..
    kann man nicht den taskmanager abfragen ob die anwendung noch "antwortet"?



  • BigNeal schrieb:

    kann man nicht den taskmanager abfragen ob die anwendung noch "antwortet"?

    Das "Porblem" ist aber, dass dann nur ein "länger nicht reagieren" dazu führt, dass das Programm als abgestürzt angenommen wird 🙄



  • was passiert mit dem Prozesshandle wenn das Programm abstürzt?



  • Horst2 schrieb:

    was passiert mit dem Prozesshandle wenn das Programm abstürzt?

    Solange das Handle noch irgendwo geoeffnet ist, bleibt das Handle erhalten.

    Und gibt Windows eine Dialogbox aus, dann laeuft der Prozess noch, weil die Dialogbox vom Default-SEH-Handler im Kontext des Prozesses angezeigt wird.

    Man koennte mit FindWindow() die Dialogbox suchen ... ist aber nicht so schoen, weil man dann FindWindow() alle paar Sekunden ausfuehren muesste, was die Performance des Systems beeintraechtigt, da fuer FindWindow() die Fensterliste gesperrt wird. Man darf dann sowieso nur die Fensterinformationen in einen Puffer kopieren, sonst laeuft Windows in Zeitlupe. 😉

    Es gibt noch ein dreckigen Trick: Man kann bestimmen, dass eine DLL zu jedem gestarteten Prozess geladen wird, und in der DLL-Initialisierung einen SEH-Handler installieren. Man muss aber sehr mit solchen Sachen aufpassen. 😉


Anmelden zum Antworten