|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] как отследить падение процесса, если их запущено несколько? |
|
[решено] как отследить падение процесса, если их запущено несколько?
|
Новый участник Сообщения: 2 |
мне нужно написать простейший watchdog. если процесс не обнаружен - запустить.
дело усложняется тем, что одинаковых процессов должно быть запущено несколько, просто из разных папок, с разными конфигами. ProcessExists($proc) отслеживает только имя процесса, соответственно если отвалился один из трёх, то эта функция никак не реагирует. есть ли какое-то решение проблемы? |
|
Отправлено: 12:37, 14-07-2010 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Можно искать в списке процессов по исполняемому пути к процессу:
$aRun_Processes = StringSplit(@SystemDir & "\Notepad.exe" & "|" & @WindowsDir & "\Regedit.exe", "|") HotKeySet("{ESC}", "_Quit") While 1 Sleep(1000) $aProcList = _ProcessListEx() For $i = 1 To $aRun_Processes[0] $bFound = False For $j = 1 To $aProcList[0][0] If $aProcList[$j][2] = $aRun_Processes[$i] Then $bFound = True EndIf Next If Not $bFound Then Run($aRun_Processes[$i]) EndIf Next WEnd Func _Quit() Exit EndFunc Func _ProcessListEx($sResourceName="", $sInResString="", $iWholeWord=1) Local $aProcList = ProcessList() Local $hKernel32_Dll = DllOpen('Kernel32.dll'), $hPsapi_Dll = DllOpen('Psapi.dll') Local $aOpenProc, $aProcPath, $sFileVersion, $aRet_List[1][1] If $hKernel32_Dll = -1 Then Return SetError(1, 0, '') If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@SystemDir & '\Psapi.dll') If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@WindowsDir & '\Psapi.dll') If $hPsapi_Dll = -1 Then Return SetError(2, 0, '') Local $vStruct = DllStructCreate('int[1024]') Local $pStructPtr = DllStructGetPtr($vStruct) Local $iStructSize = DllStructGetSize($vStruct) For $i = 1 To UBound($aProcList)-1 $aOpenProc = DllCall($hKernel32_Dll, 'hwnd', 'OpenProcess', _ 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $aProcList[$i][1]) If Not IsArray($aOpenProc) Or Not $aOpenProc[0] Then ContinueLoop DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _ 'hwnd', $aOpenProc[0], _ 'ptr', $pStructPtr, _ 'int', $iStructSize, _ 'int*', 0) $aProcPath = DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _ 'hwnd', $aOpenProc[0], _ 'int', DllStructGetData($vStruct, 1), _ 'str', '', _ 'int', 2048) DllCall($hKernel32_Dll, 'int', 'CloseHandle', 'int', $aOpenProc[0]) If Not IsArray($aProcPath) Or StringLen($aProcPath[3]) = 0 Then ContinueLoop $sFileVersion = FileGetVersion($aProcPath[3], $sResourceName) If $sResourceName = "" Or $sFileVersion = $sInResString Or _ ($iWholeWord = 0 And StringInStr($sFileVersion, $sInResString)) Then $aRet_List[0][0] += 1 ReDim $aRet_List[$aRet_List[0][0]+1][3] $aRet_List[$aRet_List[0][0]][0] = $aProcList[$i][0] ;Process Name $aRet_List[$aRet_List[0][0]][1] = $aProcList[$i][1] ;PID (Process ID) $aRet_List[$aRet_List[0][0]][2] = $aProcPath[3] ;Process File Path EndIf Next DllClose($hKernel32_Dll) DllClose($hPsapi_Dll) If $aRet_List[0][0] < 1 Then Return SetError(3, 0, '') Return $aRet_List EndFunc |
------- Отправлено: 13:03, 14-07-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Отлично! Спасибо, всё работает.
|
Отправлено: 14:00, 14-07-2010 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - C# - Как отследить состояние процесса | Flammable | Программирование и базы данных | 7 | 31-12-2010 11:55 | |
[решено] Как развернуть свёрнутое окно на панели пуск??? Если несколько вариантов-пишите ВСЕ=) | sashadeg | AutoIt | 1 | 25-02-2009 16:40 | |
Как отследить изменения на сайте? | Dupel | Хочу все знать | 9 | 17-02-2008 14:29 | |
Если установлено несколько декодеров для одного формата... | noname Incognito | Видео и аудио: обработка и кодирование | 3 | 18-09-2006 21:34 | |
Как отследить процесс завершения приложения | fossil | Программирование и базы данных | 8 | 27-04-2004 19:07 |
|