2009-04-07 2 views
3

Ich habe einige JScript, die einige Sachen mit einer ODBC-Verbindung macht. Eine Ausnahme wurde vom ODBC-ActiveXObject-Objekt ausgelöst und nicht in meinem Skript abgefangen. Ich erwartete, dass das Skript mit einem Wert ungleich 0 beendet werden würde, aber das tat es nicht. Wer weiß, warum dies der Fall ist und wie man es mit einem Wert ungleich 0 bei einer nicht abgefangenen Ausnahme beenden kann?Warum wird mein JScript (Windows-Skript-Host) mit 0 bei einer nicht abgefangenen Ausnahme beendet?

Antwort

2

Die JScript-Engine kann als virtuelle Maschine betrachtet werden. Wenn die JScript-Engine selbst oder der Skript-Host eine Art von katastrophalem Fehler aufweisen würde, könnte man erwarten, einen Exit-Code ungleich Null zu erhalten (zum Beispiel könnte der Skript-Host keine der DLLs finden, die er benötigt).

Wenn jedoch das Skriptprogramm auf dieser 'VM' ausgeführt wird, wird eine Ausnahme ausgelöst, sogar eine unbehandelte, die keinen Fehler in der Engine oder dem Host darstellt.

Was Sie tun können, ist das ganze Skript in einen try-Block und dann werfen Sie einfach die Ausnahme in den Fang. Die Scripting-Engine wird diese geworfen Ausnahme genau behandeln, wie Sie das Original behandelt wollten: -

try 
{ 

    // the rest of your script 

} 
catch(e) 
{ 
    throw(e); // returns nonzero exit code 
} 
+0

Beachten Sie, dass VBScript aus dem gleichen Problem leidet, ist aber viel schwieriger, eine Lösung zu erzielen - einer der Gründe, neige ich dazu, JScript zu bevorzugen zu VBScript. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/2929715/capture-any-error-in-vbscript. – bacar

Verwandte Themen