2016-05-05 2 views
1

Я пытаюсь запустить приложение из оболочки Windows с помощью VBScript. Приложение запускается без ошибок при запуске из QtCreator. Тем не менее, он выходит из строя при запуске из VBScript и завершается с кодом ошибки 255. Вот сценарий:Запуск приложения с использованием VBScript

Set objShell = WScript.CreateObject("WScript.Shell") 

rv = objShell.Run("path\to\application.exe", 1 , True) 
If rv <> 0 Then 
    MsgBox "Failed : " & rv 
End If 
WScript.Sleep 120000 
objShell.Run "taskkill /im path\to\application.exe" 

Set objShell = Nothing 

Может кто-то пожалуйста, указать на то, что мне не хватает?

+0

Какая строка вызывает сбой? Если вы не можете пройти через него с помощью отладчика, добавьте несколько операторов msgbox до и после ключевых команд, чтобы узнать, где он сбой. Эта информация будет большой помощью в ее отслеживании. –

+0

Кстати, я использовал «C: \ Windows \ System32 \ calc.exe» для приложения (с более коротким временем сна для тестирования), и он работал нормально на 64-битной Windows 7. Обратите внимание, что «True «аргумент при первом вызове run() означает« ждать завершения приложения », так что больше нечего будет убивать позже, если другой процесс не запустит его? Убийство по имени может быть опасным. Я считаю, что есть способ начать процесс, а затем сохранить его идентификатор процесса (PID). После сна убейте PID, чтобы убедиться, что вы убиваете процесс, который вы начали, а не другое. Гораздо безопаснее. –

+0

См. Это сообщение https://stackoverflow.com/questions/35298200/taskkill-exit-code-255, 255 может означать, что проблема связана с этим путем. Если вы его включили, отключите 'On Error Resume Next'. – langstrom

ответ

0

я смог найти ошибку. Я устанавливаю текущий каталог в папку, содержащую файл .exe. Это измененный скрипт:

Option Explicit 
Dim Title,objShell,rv,ProcessPath,ProcessName 
Title = "Launching and killing application using Vbcript" 
Set objShell = CreateObject("WScript.Shell") 
objShell.CurrentDirectory = "path\to\folder\containing\.exe" 
ProcessPath = "path\to\application.exe" 
objShell.Run DblQuote(ProcessPath),1,False 
If rv <> 0 Then 
    MsgBox "Failed : " & rv 
End If 
Set objShell = Nothing 
WScript.Sleep 12000 
ProcessPath = Split(ProcessPath,"\") 
ProcessName = ProcessPath(UBound(ProcessPath)) 
Msgbox "The Process named "& DblQuote(ProcessName) &" is being to be killed now !",_ 
vbExclamation,Title 
Call Kill(ProcessName) 

Sub Kill(ProcessName) 
    Dim Ws,Command,Execution 
    Set Ws = CreateObject("Wscript.Shell") 
    Command = "cmd /c Taskkill /F /IM "& DblQuote(ProcessName) &"" 
    Execution = Ws.Run(Command,0,True) 
    Set Ws = Nothing 
End Sub 

Function DblQuote(Str) 
    DblQuote = Chr(34) & Str & Chr(34) 
End Function 
1

Дайте попробовать для этого VBScript и сказать мне результат:

Option Explicit 
Dim Title,objShell,rv,ProcessPath,ProcessName 
Title = "Launching and killing application using Vbcript" 
Set objShell = CreateObject("WScript.Shell") 
ProcessPath = "C:\Windows\system32\Calc.exe" 
rv = objShell.Run(DblQuote(ProcessPath),1,False) 
If rv <> 0 Then 
    MsgBox "Failed : " & rv 
End If 
Set objShell = Nothing 
WScript.Sleep 12000 
ProcessPath = Split(ProcessPath,"\") 
ProcessName = ProcessPath(UBound(ProcessPath)) 
Msgbox "The Process named "& DblQuote(ProcessName) &" is being to be killed now !",_ 
vbExclamation,Title 
Call Kill(ProcessName) 
'**************************************************** 
Sub Kill(ProcessName) 
    Dim Ws,Command,Execution 
    Set Ws = CreateObject("Wscript.Shell") 
    Command = "cmd /c Taskkill /F /IM "& DblQuote(ProcessName) &"" 
    Execution = Ws.Run(Command,0,True) 
    Set Ws = Nothing 
End Sub 
'**************************************************** 
Function DblQuote(Str) 
    DblQuote = Chr(34) & Str & Chr(34) 
End Function 
'**************************************************** 
+0

Я использовал этот скрипт, но я все еще получаю ошибку. Я изменил третий параметр в Run на True, чтобы получить возвращаемое значение, и он все еще дает код выхода 255. – user2522981

+0

@ user2522981, когда я установил его в false, есть причина – Hackoo

+0

Я также запускал его с параметром False. Он разбился и после того, как время ожидания было завершено, отобразилось окно сообщения. – user2522981

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