PDA

Показать полную графическую версию : Проверки запущенного процесса.


Svnkill
16-05-2021, 14:27
У мен есть программа которая должна работать 24/7 но бывает что она сама по себе может крашнуться. Как сделать так чтобы батник чекал запущена программа или нет и если нет то запускал ее, желательно с зарежкой в 1 минуту. И нужно чтобы батник проверял это постоянно

megaloman
16-05-2021, 15:53
Нашел готовый 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.

Iska
16-05-2021, 17:14
В роли:
программа которая должна работать 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

alpap
17-05-2021, 13:48
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

Iska
17-05-2021, 16:54
alpap, почему like, почему не «=»?

alpap
17-05-2021, 17:12
Iska,
процесс Calculator для разных операционных систем называется по-разному, думаю не только этот процесс и орфография у некоторых хромает, поэтому - на всякий случай.

Iska
17-05-2021, 19:17
alpap, спасибо, ясно.

Я потому нынче пользую notepad.exe в качестве подопытного кролика.

Vadikan
17-05-2021, 20:11
http://forum.oszone.net/forumdisplay.php?f=102&filter_string=%EF%F0%EE%E2%E5%F0%25%EF%F0%EE%F6&filter_by=title

Fors1k
19-05-2021, 14:42
While($true){(Start calc -PassThru).WaitForExit();Sleep 60}




© OSzone.net 2001-2012