Сборник статей по настройке Windows


Windows Script Host (WSH) - обработка исключений



Вначале стоит определиться с терминами, ведь если любой программист прекрасно знает что такое "исключения", то остальные далеко не все точно представляют о чем идет речь. Говоря простым языком исключения или исключительные ситуации - это ошибки, возникающие в ходе работы программы (в нашем случае скрипта). Но это не те ошибки, когда вы забыли поставить закрывающую скобку, запятую или ошиблись в имени переменной. Это ошибки, возникающие в некоторых (исключительных) ситуациях во время выполнения РАБОЧЕГО скрипта.

Рассмотрим простенький пример скрипта на VBScript, пытающегося прочитать значение какого-то параметра в реестре и выдать его в сообщении:

Dim Perem set WSHShell = WScript.CreateObject("WScript.Shell")

WSHShell.Popup "Начало скрипта"

Perem = "" Perem = WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test") WSHShell.Popup Perem WSHShell.Popup "Конец скрипта"

Сообщение "Начало скрипта" появилось, следовательно, синтаксических ошибок мы не допустили, но вот затем появляется сообщение об ошибке

Пример сообщения об ошибке

что и неудивительно - параметра с именем Test в разделе HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer не существует. Из-за этого наш пример не отработал до конца. Возникает логичный вопрос: а нельзя ли каким-то образом отловить момент появления ошибки, как-то его обработать и продолжить выполнение скрипта дальше? Оказывается, можно. Перепишем наш пример следующим образом:

Dim Perem set WSHShell = WScript.CreateObject("WScript.Shell")

WSHShell.Popup "Начало скрипта" Perem = ""

On Error Resume Next GetErr() if Err.Source="WshShell.RegRead" then Perem = "Параметр не существует" else Perem = WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test") end if Err.Clear

WSHShell.Popup Perem WSHShell.Popup "Конец скрипта"

Function GetErr() If WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test") Then End If End Function




Начало  Назад  Вперед