почему мой JScript (хост сценария Windows) завершается с 0 при неперехваченном исключении?

У меня есть JScript, который делает некоторые вещи с подключением ODBC. Исключение было вызвано объектом ODBC ActiveXObject и не перехвачено в моем сценарии. Я ожидал, что скрипт выйдет со значением, отличным от 0, но этого не произошло. Кто-нибудь знает, почему это так и как заставить его выйти со значением, отличным от 0, при необработанном исключении?


person Community    schedule 07.04.2009    source источник


Ответы (1)


Движок JScript можно рассматривать как виртуальную машину. Если в самом механизме JScript или на узле сценария произошел какой-либо катастрофический сбой, вы могли бы ожидать получения ненулевого кода выхода (например, узел сценария не смог найти одну из необходимых ему библиотек DLL).

Однако, если программа сценария, запущенная на этой «ВМ», выдает исключение, даже необработанное, это не является сбоем в движке или хосте.

Что вы можете сделать, так это поместить весь скрипт в блок try, а затем просто сгенерировать исключение в блоке catch. Скриптовый движок обработает это выброшенное исключение точно так же, как вы хотели, чтобы обрабатывалось исходное:

try
{

  // the rest of your script

}
catch(e)
{
  throw(e);  // returns nonzero exit code
}
person AnthonyWJones    schedule 07.04.2009
comment
Обратите внимание, что VBScript страдает от той же проблемы, но ее гораздо сложнее исправить — одна из причин, по которой я предпочитаю JScript VBScript. См. stackoverflow.com/questions/2929715/ для деталей. - person bacar; 16.09.2010