Тема: VBScript: удаление заданного раздела реестра вместе с подразделами
Используется WMI провайдер «StdRegProv» и рекурсивный перебор вложенных подразделов с последующим их удалением. Результат выполнения функции «DeleteRegistryKey()» определяется группой констант «con_*» («0» — успешное удаление).
' Объявляется глобально (рекомендуется), либо на уровне RecursiveRegKeyDelete
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
' Пример вызова
Result = DeleteRegistryKey("HKLM\SOFTWARE\SOMETHING")
WScript.Echo "Result:", Result
Set objReg = Nothing
'---------------------------------------------------------
Function DeleteRegistryKey(parKey)
'On Error Resume Next
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_CURRENT_CONFIG = &H80000005
Select Case Left(parKey,4)
Case "HKLM": lngRoot = HKEY_LOCAL_MACHINE
Case "HKCU": lngRoot = HKEY_CURRENT_USER
Case "HKCR": lngRoot = HKEY_CLASSES_ROOT
Case "HKCC": lngRoot = HKEY_CURRENT_CONFIG
End Select
intResult = RecursiveRegKeyDelete(lngRoot, Mid(parKey, 6))
DeleteRegistryKey = intResult
End Function
'-------------------------------------------------
Function RecursiveRegKeyDelete(parRoot, parKey)
'On Error Resume Next
Const con_READ_CONTROL = 131072
Const con_KeyDeletedSuccessfully = 0
Const con_KeyDoesNotExist = 1
Const con_AccessDenied = 2 ' либо нет доступа, либо не удалось удалить вложенные ключи
Const con_SomeOtherError = 3
If objReg.CheckAccess(parRoot,parKey,con_READ_CONTROL) = 0 Then
If objReg.EnumKey(parRoot, parKey, arrSubKeys) = 0 Then
If Not IsNull(arrSubKeys) Then
For i = 0 To UBound(arrSubKeys)
RecursiveRegKeyDelete parRoot, parKey & "\" & arrSubKeys(i)
Next
End If
End If
intResult = objReg.DeleteKey(parRoot, parKey)
If intResult = 0 Then
RecursiveRegKeyDelete = con_KeyDeletedSuccessfully
ElseIf intResult = 5 Then
RecursiveRegKeyDelete = con_AccessDenied
Else
RecursiveRegKeyDelete = Con_SomeOtherError
End If
Else
RecursiveRegKeyDelete = con_KeyDoesNotExist
End If
End Function
'-------------------------------------------------
Автор идеи — dsb.