我需要创建一个简单的vbs脚本来运行某个进程'自动。我在微软的网站上找到了以下脚本。它可以像原始示例所示的那样运行notepad.exe,但我尝试修改它以运行myprog.exe。该计划的完整途径是:C:\myprogdir\myprog.exe
Const SW_NORMAL = 1
strComputer = "."
strCommand = "myprog.exe"
strPath = "C:\myprogdir\"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
' Configure the Notepad process to show a window
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = SW_NORMAL
' Create Notepad process
Set objProcess = objWMIService.Get("Win32_Process")
intReturn = objProcess.Create _
(strCommand, strPath, objConfig, intProcessID)
If intReturn <> 0 Then
Wscript.Echo "Process could not be created." & _
vbNewLine & "Command line: " & strCommand & _
vbNewLine & "Return value: " & intReturn
Else
Wscript.Echo "Process created." & _
vbNewLine & "Command line: " & strCommand & _
vbNewLine & "Process ID: " & intProcessID
End If
我一直得到返回值:9,表示&#34;找不到路径&#34;。但是路径是正确的。有没有我没有得到的东西?
答案 0 :(得分:1)
您不需要所有这些来启动进程,只需要Shell对象。另外,请确保将可执行文件的路径用引号括起来(如果路径有空格)。像这样:
Option Explicit
Dim shl
Set shl = CreateObject("Wscript.Shell")
Call shl.Run("""C:\myprogdir\myprog.exe""")
Set shl = Nothing
WScript.Quit
答案 1 :(得分:0)
除非程序的路径包含在系统的%PATH%
环境变量中,否则您需要使用可执行文件的完整路径指定命令行。将路径指定为工作目录将不起作用。
strProgram = "myprog.exe"
strPath = "C:\myprogdir"
Set fso = CreateObject("Scripting.FileSystemObject")
strCommand = fso.BuildPath(strPath, strProgram)
...
intReturn = objProcess.Create(strCommand, strPath, objConfig, intProcessID)
使用BuildPath
方法可以避免由于必须跟踪前导/尾随反斜杠而导致的麻烦。
请注意,您需要在包含空格的路径周围放置双引号,例如像这样:
strCommand = Chr(34) & fso.BuildPath(strPath, strProgram) & Chr(34)
正如其他人已经指出的那样,有更简单的方法可以在本地计算机上启动流程,例如Run
:
Set sh = CreateObject("WScript.Shell")
sh.Run strCommand, 1, True
Set app = CreateObject("Shell.Application")
app.ShellExecute strCommand, , strPath, , 1
但Run
和ShellExecute
之间存在一些显着差异。前者可以同步或异步运行(这意味着命令要么等待或不等待外部程序终止)。后一个OTOH总是异步运行(即该方法立即返回而不等待外部程序终止),但具有以下优点:当通过指定动词"runas"
启用UAC时,它可用于启动具有提升权限的程序作为4 th 的论点。
但是,这些方法仅允许在本地计算机上启动进程。如果您希望能够在远程计算机上启动进程,则必须使用WMI:
strComputer = "otherhost"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
有关与远程主机的WMI连接的详细信息,请参阅here。