Проверки запущенного процесса.
У мен есть программа которая должна работать 24/7 но бывает что она сама по себе может крашнуться. Как сделать так чтобы батник чекал запущена программа или нет и если нет то запускал ее, желательно с зарежкой в 1 минуту. И нужно чтобы батник проверял это постоянно
|
Нашел готовый vbs-скрипт.
Код:
'*******************************************************************
' Описание: Запуск отсутствующей программы
'*******************************************************************
Exe = "Notepad.exe" ' Исполнимый файл программы
PathExe = "C:\WINDOWS\system32" ' Путь к файлу (без \ на конце)
On Error Resume Next
If Err.Number = 0 Then
Set WMI = GetObject("winMgmts:")
Set Processes = WMI.ExecQuery("SELECT * FROM Win32_Process Where Name=""" + Exe + """")
Present = False
For Each Process In Processes
Present = (UCase(Process.Name) = UCase(Exe))
' MsgBox Process.Name + vbCrLf + Exe
Next
Set WS = CreateObject("WScript.Shell")
If Not Present Then
WS.Exec PathExe + "\" + Exe
End If
End If
Поместите его исполнение в планировщик wscript имяскрипта.vbs и настройте его выполнение с нужной вам периодичностью. CMD здесь не удобен - будете потом бороться с окном CMD.
|
В роли:
Цитата:
Цитата Svnkill
программа которая должна работать 24/7 »
|
— Блокнот:
Скрытый текст
Код:
Option Explicit
Const strProcessPath = "c:\windows\system32"
Const strProcessName = "notepad.exe"
Dim objSWbemServicesEx
Dim objSWbemEventSource
Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
objSWbemServicesEx.Get("Win32_Process").Create strProcessPath & "\" & strProcessName, strProcessPath, Nothing, vbEmpty
Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process' AND " & _
"TargetInstance.Name = '" & strProcessName & "'" _
)
Do
objSWbemEventSource.NextEvent
WScript.Sleep 60 * 1000
objSWbemServicesEx.Get("Win32_Process").Create strProcessPath & "\" & strProcessName, strProcessPath, Nothing, vbEmpty
Loop
Set objSWbemEventSource = Nothing
Set objSWbemServicesEx = Nothing
WScript.Quit 0
|
PowerShell (не ниже 5)
Код:
# Мониторинг процесса (каждые 5 сек), пропал - получим сообщение и запустим процесс через 1мин
$proc = "calc"
Function jbPrc {
$query = "Select * from __InstanceDeletionEvent within 5 where TargetInstance ISA 'Win32_Process' and TargetInstance.Name like '%$proc%'"
$sourceId = "job$proc"
Register-CimIndicationEvent -Query $query -SourceIdentifier $sourceId -Action {
Write-Host "Process '$proc' disconnected!"
Start-Sleep -s 60
start $proc
}
}
jbPrc
|
alpap, почему like, почему не «=»?
|
Iska,
процесс Calculator для разных операционных систем называется по-разному, думаю не только этот процесс и орфография у некоторых хромает, поэтому - на всякий случай.
|
alpap, спасибо, ясно.
Я потому нынче пользую notepad.exe в качестве подопытного кролика.
|
Код:
While($true){(Start calc -PassThru).WaitForExit();Sleep 60}
|
Время: 18:44.
© OSzone.net 2001-