Vbscript 如何从字符串值创建reg_二进制文件?

Vbscript 如何从字符串值创建reg_二进制文件?,vbscript,Vbscript,这件事我必须做一次,以后再也不必做了。我想从字符串创建REG_二进制文件。有一个程序对密码进行编码,并将其作为REG_二进制文件存储在注册表中。我已经复制了REG_二进制文件,并将其作为varchar(即字符串)存储在我的数据库中。因此,每当用户登录到网络中的任何计算机时,都需要将此注册表二进制文件应用于注册表值 这是我试过的 Set oShell = CreateObject("WScript.Shell") Set oFso = CreateObject("Scripting.FileSys

这件事我必须做一次,以后再也不必做了。我想从字符串创建REG_二进制文件。有一个程序对密码进行编码,并将其作为REG_二进制文件存储在注册表中。我已经复制了REG_二进制文件,并将其作为varchar(即字符串)存储在我的数据库中。因此,每当用户登录到网络中的任何计算机时,都需要将此注册表二进制文件应用于注册表值

这是我试过的

Set oShell = CreateObject("WScript.Shell")
Set oFso = CreateObject("Scripting.FileSystemObject")

'Create the ADsystem Information Object
Set objADSystemInfo = CreateObject("ADSystemInfo")
'Get the current information into a new object
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)

'Office Details
oShell.RegWrite "HKCU\Software\Microsoft\Office\Common\UserInfo\UserInitials", objUser.sAMAccountName, "REG_SZ"
oShell.RegWrite "HKCU\Software\Microsoft\Office\Common\UserInfo\UserName", objUser.givenName & " " & objUser.sn, "REG_SZ"

On Error Resume Next

'Connect to MySQL Database
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")

objConnection.Open "DSN=members;"
objRecordset.CursorLocation = adUseClient
objRecordset.ActiveConnection = objConnection


objRecordset.Open "SELECT * FROM members WHERE USER_ID = '" & objUser.sAMAccountName & "'"


aRegPath = "HKCU\Software\KONICA MINOLTA\KONICA MINOLTA 350/250/200 VXL\AccountTrack\"
oShell.RegWrite aRegPath & "DepartmentName", objRecordset("USER_ID"), "REG_SZ"
oShell.RegWrite aRegPath & "DepartmentPass", objRecordset("DEPARTMENT_PASS"), "REG_BINARY" 
用户ID
显示在注册表中,但不显示
部门通行证
。我想这是因为部门通行证存储为字符串。来自数据库的部门通行证的值为:

be 2e 31 df ff 53 ca 35 f8 32 90 22 fc 44 4b 66 f8 32 90 22 fc 44 4b 66 f8 32 90 22 fc 44 4b 66 f8 32 90 22 fc 44 4b 66 f8 32 90 22 fc 44 4b 66 f8 32 90 22 fc 44 4b 66 f8 32 90 22 fc 44 4b 66 32 88 64 99 7b ab 8d 3c

注册表需要以正确的方式显示此值。我该怎么做

如有疑问,请阅读:

RegWrite最多将一个DWORD写入REG_二进制值。此方法不支持较大的值

您尝试执行的操作需要WMI方法:

Const HKCU = &h80000001

Set reg = GetObject("winmgmts://./root/default:StdRegProv")

key   = "Software\KONICA MINOLTA\KONICA MINOLTA 350/250/200 VXL\AccountTrack"
name  = "DepartmentPass"
value = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

rc = reg.SetBinaryValue(HKCU, key, name, value)
If rc <> 0 Then
  WScript.Echo "Error setting binary value"
  WScript.Quit 1
End If

因为我不需要写很多VB脚本,所以我并不想学太多。我确实明白@Ansgar Wiechers想做什么,但我没有成功。然而,我发现这个链接指向了我的写作方向。我只需要根据自己的需要调整一些东西,然后从数据库中获取值,然后就可以了

我必须将语法更改为
Set reg=GetObject(“WinMgmts:root\default:StdRegProv”)
才能让它工作(@windows7)..@aschipfl-Hmm。。。奇怪的我使用了
GetObject(“winmgmts://./root/default:StdRegProv“”
在Windows 7和其他版本(旧版本和新版本)上运行了多年,甚至几十年。对不起,我太笨了,这两种版本都有效,我只是在代码中出现了另一个错误并得出了错误的结论。。。
str = objRecordset("DEPARTMENT_PASS")
ReDim value(Len(str) - 1)
For i = 1 To Len(str)
  c = Mid(str, i, 1)
  value(i-1) = Asc(c)
Next