0

我尝试在一个名为“addcurrentkey.vbs”的文件中执行此操作,但它说“)”应该在第 1 行。字符 38。

我试过这个教程: http: //www.codeproject.com/Articles/16569/Autorun-Applications

为什么我不能执行 .vbs 文件?

Private Sub AddCurrentKey(ByVal name As String, ByVal path As String)
Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True) 
key.SetValue(name, path) 
End Sub 
4

2 回答 2

3

您发布的代码可能是用 VB.net(或者可能是 VBA)编写的。您将代码作为 VBScript 运行,它不支持类型参数和变量。它也不提供您尝试使用的注册表对象。从此更改程序:

Private Sub AddCurrentKey(ByVal name As String, ByVal path As String)
  Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True) 
  key.SetValue(name, path) 
End Sub

对此:

Private Sub AddCurrentKey(ByVal name, ByVal path)
  Dim key : key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  CreateObject("WScript.Shell").RegWrite key & "\" & name, path
End Sub

问题就会消失。

于 2013-09-12T06:51:18.350 回答
2

VBScript 仍然使用“旧的”Visual Basic 语法。它区分了表达式中使用的函数调用和作为语句的过程调用。您在表达式中使用(括号)而不是在语句中。使固定:

 key.SetValue name, path 

或者,如果您愿意:

 Call key.SetValue(name, path)

错误消息很难解释,因为脚本解释器认为您正在尝试编写以下内容:

 key.SetValue (name), path

这意味着完全不同的东西。VBScript 传递参数 ByRef。名称周围的额外括号将其转换为创建变量副本的表达式。它可以由 SetValue 过程修改,而不会影响name变量。不是它实际做的,也不是你想要的。

于 2013-09-12T19:33:18.440 回答