VBScript:如何将十六进制值添加到注册表项中



二进制数据插入(来自.reg文件):

"失败操作"=十六进制:00,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,00,14,00,00

,\

00,01,00,00,00,60,ea,00,00,00,01,00,00,00,00,60,ea,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0

MSDN 说:"RegWrite 最多会将一个 DWORD 写入一个 REG_BINARY 值。此方法不支持较大的值。

wshShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Service1\FailureActions", hexValueHere, "REG_BINARY"

我试图避免调用 Regedit 并导入 .reg 文件。我只需要添加具有上述正确十六进制值的"失败操作"键。

有什么想法吗?这是我的最新代码,它仍然不起作用。:-(

Option Explicit
Call SetServiceFailureActions()
Sub SetServiceFailureActions()
    Const HKEY_LOCAL_MACHINE = &H80000002
    Set objRegistry=GetObject( _
    "winmgmts:{impersonationLevel=impersonate}!\" & _
    "." & "rootdefault:StdRegProv")
    Dim path
    path = "SYSTEMCurrentControlSetServicesService1FailureActions"
    Dim hexValues, arrHexValues, arrDecValues
    hexValues = "hex:00,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,14,00,00,00,01,00,00,00,60,ea,00,00,01,00,00,00,60,ea,00,00,00,00,00,00,00,00,00,00"
    arrHexValues = Split(Replace(hexValues, "hex:", ""), ",")
    arrDecValues = DecimalNumbers(arrHexValues)
    Dim objRegistry, Return
    Return = objRegistry.SetBinaryValue(HKEY_LOCAL_MACHINE, path, "FailureActions", arrDecValues)
    If (Return = 0) And (Err.Number = 0) Then
        Wscript.Echo "Registry key value for [FailureActions] has been added successfully."
    Else
        ' An error occurred
        Wscript.Echo "ERROR when setting the value for the registry key: [FailureActions]."
        WScript.Echo "Exception:" & vbCrLf &_
                     "Error number: " & Err.Number & vbCrLf &_
                     "Error description: '" & Err.Description & vbCrLf
    End If
End Sub

Function DecimalNumbers(arrHex)
   Dim i, strDecValues
   For i = 0 to Ubound(arrHex)
     If isEmpty(strDecValues) Then
       strDecValues = CLng("&H" & arrHex(i))
       'WScript.Echo "strDecValues: " & strDecValues
     Else
       strDecValues = strDecValues & "," & CLng("&H" & arrHex(i))
       'WScript.Echo "strDecValues: " & strDecValues
     End If
   next
   DecimalNumbers = split(strDecValues, ",")
End Function

谢谢

您可以使用

WMI 注册表提供程序的 SetBinaryValue 方法,只要您不必支持 Windows XP: 但请注意,这必须作为提升的进程运行,因为它是受保护的密钥

Const HKEY_LOCAL_MACHINE    = &H80000002
Set objRegistry = GetObject("Winmgmts:rootdefault:StdRegProv")
path = "SYSTEMCurrentControlSetServicesService1"
values = Array(128,81,1,0,0,0,0,0) ' etc
Return = objRegistry.SetBinaryValue(HKEY_LOCAL_MACHINE, _
   path, "FailureActions", values)
If (Return = 0) And (Err.Number = 0) Then
    Wscript.Echo "Binary value added successfully"
Else
    ' An error occurred
End If

最新更新