IT→ Существует ли раздел в реестре на VBScript

Дек 26, 2011


В предыдущей статье описывался один из способов определения установленной программы на компьютере пользователя. Реализация данного способа была выполнена в виде функции на языке VBScript.
Если присмотреться более внимательно, можно обнаружить, что в ней использовался, достаточно, нестандартный способ проверки существования ключа. Стоит заметить, что речь идет именно об определении ключа, а не параметра или его значения.

Для того, чтобы определить существует ключ или нет, функция проверяет параметр по умолчанию, который всегда присутствует в любом разделе реестра. Значение дефолтного параметра чаще всего не задано, но тем не менее он есть.

Поэтому, чтобы проверить наличие определенного раздела в реестре, достаточно проверить его параметр по умолчанию. На VBScript, чтобы получить значение параметра по умолчанию какого-либо раздела, следует к имени раздела, в конце поставить дополнительный слэш.

Приведем примеры чтения значений из реестра, из которых наглядно показывается в чем их отличие.

Извлечение значение из параметра Windows, который находится в разделе HKLM\SOFTWARE\Microsoft\

WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows")

Извлечение значение из параметра по умолчанию, который находится в разделе HKLM\SOFTWARE\Microsoft\Windows\

WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\")


Также нужно учитывать, что если раздела не существует, как и его параметра по умолчанию, то будет выброшено исключение, которое нужно корректно обработать.

Суммировав все вышесказанное, мы получим достаточно простую функцию, листинг которой представлен далее.

Листинг 1. Функция проверки существования раздела.

Function KeyExists(KeyName)
    On Error Resume Next
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.RegRead(KeyName & "\")

    If Err.Number <> 0 Then
        KeyExists = False
    Else
        KeyExists = True
    End If
End Function


А чтобы картина была полной, ниже показана функция, с помощью которой проверяется существование параметра в реестре.

Листинг 2. Функция проверки существования параметра.

Function ValueExists(ValueName)
    On Error Resume Next
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.RegRead(ValueName)

    If Err.Number <> 0 Then
        ValueExists = False
    Else
        ValueExists = True
    End If
End Function


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *