私は、.batファイル実行の結果が結果を返したかどうかを確認するためにテストする必要があるシナリオセットアップがあります。 .batファイルは別の.exeを呼び出し、.batファイルは.exeからそのDOSボックスに重大なエラー情報を出力するCMD DOSウィンドウを持っています。 .exeが正しく起動しない場合は、SQL DBで結果を確認できます。私は現在の.batファイルを閉じて再起動する必要があります。 これはかなりシンプルなようですが、WMI呼び出しを使用してProcessIDを取得できます。 Terminate()コマンドでプロセスを終了できます。メモ帳、calc、iexplorerなど。私がVBScriptを実行して.batファイルを終了すると、PIDを終了します(これはPIDがもう見えないため)ただし、DOSボックスはまだ開いており、.batファイルから呼び出された.exeはまだ実行されています。 DOSボックスで "X"をクリックするか、タイトルバーを右クリックして "閉じる"を選択すると、DOSボックスと.exeがともに殺されます。このスクリプトを正しく動作させるにはどうすればよいですか。サーバーはWindows Server 2003を実行しています(一部はx32、その他はx64)。何か案は?ここに私のコードのバージョンがあり、いくつかの回転数があった:.batファイルによって開始されたVBScript終了プロセス
If colFiles.Count = 0 Then
Wscript.Echo "The file does not exist on the remote computer."
Else
Wscript.Echo "The file exists on the remote computer."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objItem in colProcessList
If InStr(objItem.CommandLine, "r15_A.bat") Then
Wscript.Echo "Batch file: " & objItem.CommandLine & " Process ID: " & objItem.ProcessID & " Parent ID: " & objItem.ParentProcessID
Call TerminateProcess(objItem.ParentProcessID)
Call TerminateProcess(objItem.ProcessID)
End If
Next
dim shell
set shell=createobject("wscript.shell")
shell.run BATDIR & BATFILE
'set shell=nothing
End If
Function TerminateProcess(PID)
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Handle = '" & PID & "'")
For Each objProcess in colProcesses
On Error Resume Next
return = objProcess.Terminate()
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Handle = '" & PID & "'")
If Error Then
TerminateProcess = FALSE
Else
TerminateProcess = TRUE
msgBox colProcesses.Count
End If
Next
End Function
私もALT-F4、X、C、などを送信するためのSendKeysを使用しようとしました:AppActivateのは正しいDOSボックスを持っていフロント。事前に
Set WshShell = CreateObject("WScript.Shell")
WshShell.AppActivate "r15_A"
'WshShell.SendKeys("+{F10}")
WshShell.SendKeys("C")
おかげ
EDIT -------------- はい、私は、プロセス、この.BATファイルの呼び出しを殺すために持っているつもりです。このDOSボックスは開いたままです。迷惑だが、私はそれで生きることができる。最後に私は最初のスクリプトに似たスクリプトを書いたが、CommandLineパラメータをチェックすることで殺したいインスタンスをチェックするだけだ:(FAILファイルが存在するかどうかを調べるための "-FAIL.txt"それがある場合、その後、sciptsの残りの部分が実行される)
Set colFiles = objWMIService. _
ExecQuery("Select * From CIM_DataFile Where Name = 'S:\\servers\\Logs\\" & LOGFILE & "-FAIL.txt'")
If colFiles.Count = 0 Then
'Wscript.Echo "The file does not exist on the remote computer."
Else
'Wscript.Echo "The file exists on the remote computer."
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'AppStart.exe'")
For Each objProcess in colProcessList
IF instr(objProcess.CommandLine, "robo05-A") > 0 THEN
'msgBox "Found text"
objProcess.Terminate()
'This part restarts the failed .bat file.
wscript.sleep (200)
dim shell
set shell=createobject("wscript.shell")
shell.run BATDIR & BATFILE
'set shell=nothing
ELSE
'msgBox "Not found"
END IF
Next
End If