Entwickler-Ecke

Windows API - Fehlerhafter Prozess wird nicht beendet


Udontknow - Do 28.07.05 08:15
Titel: Fehlerhafter Prozess wird nicht beendet
Hallo allesamt!

Ich habe eine Anwendung, die zu verschiedenen Zeiten nacheinander andere Anwendungen startet, auf deren Beendigung wartet und anschliessend die nächste Applikation in der Liste startet. Ist die Liste der Anwendungen durch, wird 5 Minuten gewartet, und die Liste wird wieder durchgeackert.

Nun kommt es manchmal zu dem Phänomen, daß Programme ganz brutal abstürzen, es kommt eine Meldung "XXX hat einen Fehler verursacht und muß geschlossen werden". Ich habe bis jetzt nicht herausfinden können, wieso das so ist (evtl. hat es was mit Rave Reports zu tun=, aber das ist halb so wild, das nächste Mal funktioniert´s meist wieder. Diese Meldung blockiert nun aber den weiteren Ablauf der Listenabarbeitung, man muß die Meldung manuell wegklicken.

Ich habe bereits probiert, eine Art Timeout zu verwenden und den Prozess der fehlerhaften Anwendung mit TerminateProcess zu beenden, aber anscheinend ist dieser API-Aufruf blockiert, wenn die genannte Meldung zu sehen ist.

Wie kann ich diese Meldung unterdrücken oder sie automatisch aus meiner Hauptanwendung heraus wegklicken?

Cu,
Udontknow


jasocul - Do 28.07.05 08:22

Bist du sicher, dass du dem richtigen Prozess das Terminate schickst? Ich meine, dass in der Prozessliste für die Anwendung im Fehlerfall zwei Prozesse existieren. :gruebel:
Testen kann ich das gerade nicht. Meine Programme laufen alle sauber. :lol:


Udontknow - Do 28.07.05 08:33

Ja, ich bin sicher.

Durch CreateProcess bekomme ich ja die Prozess-ID mitgeteilt, und die wird eben auch für das TerminateProcess verwendet.
Wenn dieser "Fehler" nicht auftritt, können die Programme auch ohne Probleme per TerminateProcess beendet werden.

Cu,
Udontknow


jasocul - Do 28.07.05 08:52

Und wenn du versuchst die ProcessID der Fehlermeldung zu finden und den zu beenden?


Udontknow - Do 28.07.05 09:49

Hat sich gerade erledigt. Ich war zu dumm, meiner Prozedur einen Timeout zu übergeben, also hat die Prozedur auch keinen Abbruch veranlasst. Beim Testen der Prozedur hatte ich´s gemacht ... :mrgreen: :oops:

Trotzdem danke für die Hilfe.

Die Meldung steht zwar dann noch immer auf dem Schirm, aber der Haupttask läuft weiter. Also nur noch ein Schönheitsfehler, den ich wahrscheinlich gleich per FindWindow auch eliminieren kann...

Cu,
Udontknow