Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Автоматический запуск процесса, если он закрыт. (http://forum.oszone.net/showthread.php?t=274519)

daniil98797 23-12-2013 07:35 2277115

Автоматический запуск процесса, если он закрыт.
 
Прошу помощи, необходим скрипт, который бы следил за процессом и перезапускал, если он закроется/вылетит.

Iska 23-12-2013 08:51 2277133

Код:

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 2278646

Огромное спасибо, но можно ли сделать отслеживание было по PID или имени процесса? Проблема в том, что процесс, за которым нужно следить и процесс, который нужно запустить в случае закрытия первого отличаются. Простите, в первом сообщении неправильно выразился.

Iska 26-12-2013 05:15 2278670

Код:

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



Время: 19:31.

Время: 19:31.
© OSzone.net 2001-