Servus, Szenario: WinXP, ich importiere mit einem Konsolenprogramm haufenweise Daten ( bis zu 1 TB pa). Klar passieren da Fehler, ab und zu schießt es auch mal das Programm ab. Auf XP kommt dann eine Windows-MsgBox mit der netten Aufforderung, jetzt mal auf "ok" zu klicken. Blöd, wenn das auf einem anderen Rechner passiert und ich mich per VPN darauf einloggen muß wenn sich das Programm mal länger nichr rührt. Kann man irgendwie diese Meldung unterdrücken ? Einen Crash bekomme ich auch so mit. Das Programm wird über ein Batchfile gestartet, nicht manuell. (WinXP, Open Watcom C).
Joachim Drechsel schrieb: > Kann man irgendwie diese Meldung unterdrücken ? Unter XP: Drwtsn32 aufrufen, entsprechende Optionen einstellen.
In der Hilfe steht da etwas von einem "Programmfehlerhandler". Hmmmm ... Eine Option zum Unterbinden der MsgBox gibt es da leider nicht. In C++ sollte man das mit try/catch erwischen. Habe ich leider nicht. Aber erstmal Danke für den Tip, vielleicht komme ich in der Richtung weiter.
Eine Lösung habe ich gefunden:
1 | char *p = NULL; |
2 | |
3 | SetErrorMode( SetErrorMode( SEM_NOGPFAULTERRORBOX) |
4 | |SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); |
5 | strcpy( p, "Hallo"); |
haut es zuverlässig mit einem GPF in die Landschaft. An das aufrufende Programm kommt ein errorlevel -1 zurück. Die MsgBox kommt nicht. (ob das bei allen denkbaren Fehlern so geht weiß ich noch nicht, scheint aber schon mal brauchbar).
Joachim Drechsel schrieb: > Eine Option zum Unterbinden der MsgBox gibt es da leider nicht. Das Häkchen vor "visuelle Benachrichtigung" meinte ich.
Dann ist die angezeigte Meldung ein zur Runtimelibrary Deines Programmes bzw. des verwendeten Compilers gehörender Fehlerbehandler/Exceptionhandler. Wie Du den loswirst, hast Du ja zwischenzeitlich auch schon rausgefunden.
Rufus Τ. Firefly schrieb: > Dann ist die angezeigte Meldung ein zur Runtimelibrary Deines Programmes > bzw. des verwendeten Compilers gehörender > Fehlerbehandler/Exceptionhandler. Mir scheint eher, es ist Windows selbst. Ich habe noch einen PC mit W98, da schreibt er mir nur die Register in die Console. Ist also abhängig von der Windows-Version. Die .exe war die gleiche.
Joachim Drechsel schrieb: > Mir scheint eher, es ist Windows selbst. Es gibt einen Fehlerhandler von Windows -- das ist (bis einschließlich XP) Dr.Watson, den man wie oben beschrieben konfigurieren kann. (Ab Vista ist das werfault.exe, ja, die Jungs sind kreativ, was die Namenvergabe angeht). Beide nutzen die von Windows vorgesehene Debugschnittstelle; wird ein Entwicklungssystem à la Visual Studio installiert, kann auch das sich dort einklinken, so daß beim Absturz eines Programmes gleich ein Debugger geladen werden kann. Es gibt aber eben auch --zumindest bei manchen Compilern-- in der Runtimelibrary verborgenen Code zum Fehlerabfangen, der vor allem in Debug-Releases vorhanden ist, und der unabhängig von Dingen wie Dr.Watson aktiv wird.
Rufus Τ. Firefly schrieb: > Es gibt aber eben auch --zumindest bei manchen Compilern-- in der > Runtimelibrary verborgenen Code zum Fehlerabfangen, der vor allem in > Debug-Releases vorhanden ist, und der unabhängig von Dingen wie > Dr.Watson aktiv wird. Ich werde mal wühlen .. Danke !
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.