2016-05-05 13 views
1

VBScriptを使用してWindowsシェルからアプリケーションを起動しようとしています。 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ではうまくいきました。 run()への最初の呼び出しでの引数は、アプリケーションが終了するのを待つことを意味します。別のプロセスが起動しない限り、後でkillすることはありません。名前による殺害は危険です。プロセスを開始してプロセスID(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の3番目のパラメータを戻り値を取得するために変更し、それでも終了コード255を返します。 – user2522981

+0

@ user2522981私はfalseに設定したときに理由があります – Hackoo

+0

私はFalseパラメータでも実行しました。睡眠時間が終了した後、メッセージボックスを表示した。 – user2522981

関連する問題