二进制数据插入(来自.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,0MSDN 说:"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