Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Message Boxen unbehandelter Ausnahmen deaktivieren

NAN_C / 2 Antworten / Baumansicht Nickles

Hi,
Wie kann man jegliche Art von Message Boxen (die, die bei unbehandelten Ausnahmen hochkommen) eines VC++ Programms deaktivieren. Das Programm soll auf keinen Fall auf einen User Input warten. Wenn es abstürzt, soll es abstürzen. Ein watchdog soll überwachen, ob das Programm läuft. Wenn es nicht läuft, soll der watchdog das Programm starten.
Hat jemand eine Idee dazu?

WinNT, VC++

bei Antwort benachrichtigen
thomas woelfer NAN_C „Message Boxen unbehandelter Ausnahmen deaktivieren“
Optionen

die messagebox die bei unbehandelten ausnahmen hochkommen kann man ganz einfach loswerden: man behandelt die ausnahmen. das kann man entweder von fall zufall tun, oder man baut einen try(){} catch( ...) ein.

die sache mit dem watchdog ist ebenfalls relativ einfach: hier auf der site gibts ein beispiel namens kill9x - das sollte eigentlich als vorlage und ausgangspunkt reichen.

WM_HOPETHISHELPS
thomas woelfer

this posting contains no tpyos.
bei Antwort benachrichtigen
NAN_C thomas woelfer „die messagebox die bei unbehandelten ausnahmen hochkommen kann man ganz einfach...“
Optionen

Hi,
Vielen Dank für Deine Anregung.

Hab selbst noch mal gekuckt. Die catch(...) Anweisung sollte normalerweise reichen. Für krasse Fäller (z.B. wenn man einfach ein "throw;" statement irgendow im code plaziert):

Um ganz sicher zu gehen, kann man die Funktionen
"set_unexpected" und "set_terminate" aufrufen (muß für jeden Thread getan werden!) und eine neue Terminierungsroutine festlegen (eine die kein Fenster aufmacht). Allerdings müßte man den allokierten Speicher dort freigeben.

Die "Terminierungsroutinen" enthalten ein "exit(-1);" statement.
Wenn man nun unter Windows (nicht in der Entwicklungsumgebung! - Hier fängt der Debugger alle Exceptions ab!) das Programm startet kommt kein Fenster mehr hoch bei Fehlern...

Fürs überwachen kuck ich noch.
Remote starten irgendwie über DCOM.

Vielen Dank!

bei Antwort benachrichtigen