为什么通过 VBScript 添加注册表值时会出现权限错误?

为什么通过 VBScript 添加注册表值时会出现权限错误?

每次系统启动时,我都会尝试运行 VBScript 文件,并尝试使用 VBScript 修改注册表以将其添加到要运行的程序列表中,但即使我是计算机管理员,我也面临权限问题。我尝试VB_Start.vbs通过使用以下 VBScript 代码修改注册表将其添加到启动任务列表中:

Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Visual Basic" , "VB_Start.vbs" , "REG_SZ"
Set WshShell = Nothing

当我执行此代码时出现以下错误:

Error: Invalid root in registry key HKEY_LOCAL_MACHINE\SOFTWARE\......
Error Code: 80070005
Source: WshShell.RegWrite

答案1

80070005表示拒绝访问错误。您是管理员并不意味着您的 VBS 会以管理员权限自动执行。将以下代码添加到脚本顶部:

If WScript.Arguments.Named.Exists("elevated") = False Then
  CreateObject("Shell.Application").ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ /elevated", "", "runas", 1
  WScript.Quit
End If

代码将检测脚本是否以提升的权限运行,否则将以管理员权限重新启动(当然您仍然会看到提示)。

答案2

Const HKEY_CURRENT_USER = &H80000001

strComputer = "."

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &
strComputer & "\root\default:StdRegProv")

strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
strValueName = "Hidden"
strStringValues = "0"

oReg.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,strStringValues

这是我用于添加注册表项的代码格式。您只需更改 、 和 首字母中的内容,strValueNamestrStringValues指向CONST注册表中的正确部分。这些代码是:

Const HKEY_CLASSES_ROOT     = &H80000000
Const HKEY_CURRENT_USER     = &H80000001
Const HKEY_LOCAL_MACHINE    = &H80000002
Const HKEY_USERS        = &H80000003
Const HKEY_CURRENT_CONFIG   = &H80000005

相关内容