2013-11-20 3 views
0

Мне нужно создать простой скрипт vbs для запуска некоторого процесса автоматически. Я нашел следующий скрипт на веб-сайте Microsoft. Он отлично работает, чтобы запустить notepad.exe, как показывает оригинальный пример, но я пытаюсь изменить его для запуска myprog.exe. Полный путь к этой программе: C:\myprogdir\myprog.exeЗапуск процесса в VBS: путь не найден

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, что означает «Путь не найден». Однако путь правильный. Что-то я не получаю?

+0

На первый взгляд, я думаю, что конфигурация неправильная. –

+0

@DavidCandy: простой однострочный: 'CreateObject (« WScript.Shell »). Запустите« C: \ myprogdir \ myprog.exe »' – Helen

ответ

1

Вам не нужно все это для запуска процесса, вам просто нужен объект Shell. Кроме того, обязательно заверните путь своего исполняемого файла в кавычки (в случае, если путь имеет пробелы). Как это:

Option Explicit 

Dim shl 

Set shl = CreateObject("Wscript.Shell") 
Call shl.Run("""C:\myprogdir\myprog.exe""") 
Set shl = Nothing 

WScript.Quit 
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 

или ShellExecute:

Set app = CreateObject("Shell.Application") 
app.ShellExecute strCommand, , strPath, , 1 

Однако есть некоторые заметные различия между Run и ShellExecute. Первый может выполняться либо синхронно, либо асинхронно (что означает, что команда либо выполняет, либо не ждет завершения внешней программы). Последний OTOH всегда работает асинхронно (т. Е. Метод возвращается немедленно, не дожидаясь завершения внешней программы), но имеет то преимущество, что его можно использовать для запуска программ с повышенными привилегиями при включении UAC, указав глагол "runas" как 4 th аргумент.

Однако эти методы позволяют запускать процессы только на локальном компьютере. Если вы хотите, чтобы иметь возможность запускать процессы на удаленных компьютерах, вам придется использовать WMI:

strComputer = "otherhost" 

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _ 
    & strComputer & "\root\cimv2") 

См here для получения дополнительной информации о подключении к WMI удаленных хостов.

Смежные вопросы