Войти

Показать полную графическую версию : [решено] Автоматический запуск процесса, если он закрыт.


daniil98797
23-12-2013, 07:35
Прошу помощи, необходим скрипт, который бы следил за процессом и перезапускал, если он закроется/вылетит.

Iska
23-12-2013, 08:51
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 или имени процесса? Проблема в том, что процесс, за которым нужно следить и процесс, который нужно запустить в случае закрытия первого отличаются. Простите, в первом сообщении неправильно выразился.

Iska
26-12-2013, 05:15
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