Показать полную графическую версию : [решено] Автоматический запуск процесса, если он закрыт.
daniil98797
23-12-2013, 07:35
Прошу помощи, необходим скрипт, который бы следил за процессом и перезапускал, если он закроется/вылетит.
Option Explicit
Dim strComputer
Dim objSWbemLocator
Dim objSWbemServicesEx
Dim lngProcessID
strComputer = "."
Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Do
If objSWbemServicesEx.Get("Win32_Process").Create("c:\windows\system32\notepad.exe", "c:\", Nothing, lngProcessID) = 0 Then
objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process' AND " & _
"TargetInstance.Handle = '" & CStr(lngProcessID) & "'").NextEvent
Else
WScript.Echo "Can't execute [%SystemRoot%\system32\notepad.exe]."
WScript.Quit 1
End If
Loop
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing
WScript.Quit 0
Укажите вместо выделенного путь к Вашему исполняемому файлу. Используйте скрипт для запуска приложения и слежения за ним.
daniil98797
26-12-2013, 01:26
Огромное спасибо, но можно ли сделать отслеживание было по PID или имени процесса? Проблема в том, что процесс, за которым нужно следить и процесс, который нужно запустить в случае закрытия первого отличаются. Простите, в первом сообщении неправильно выразился.
Option Explicit
Dim strComputer
Dim objSWbemLocator
Dim objSWbemServicesEx
Dim lngProcessID
strComputer = "."
Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
If objSWbemServicesEx.Get("Win32_Process").Create("c:\windows\system32\notepad.exe", "c:\", Nothing, lngProcessID) = 0 Then
objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process' AND " & _
"TargetInstance.Handle = '" & CStr(lngProcessID) & "'").NextEvent
If Not objSWbemServicesEx.Get("Win32_Process").Create("c:\windows\system32\calc.exe", "c:\", Nothing, lngProcessID) = 0 Then
WScript.Echo "Can't execute [%SystemRoot%\system32\calc.exe]."
WScript.Quit 2
End If
Else
WScript.Echo "Can't execute [%SystemRoot%\system32\notepad.exe]."
WScript.Quit 1
End If
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing
WScript.Quit 0
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.