|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Перезапуск процесса после его закрытия
Здравствуйте друзья, появилась небольшая проблема, есть две запущенные программы (мониторят работу двух станков), примерное каждые пол часа программы закрываются сами собой, после того, как их заново перезапускаю, все снова работает нормально. Теперь хотелось бы как то автоматизировать этот процесс, допустим, что бы программа проверяла каждую секунду список запущенных процессов, и если в этих процессах отсутствуют процессы нужных мне программ, что бы сразу происходил их перезапуск. Подскажите пожалуйста, как можно это реализовать? Я так подозреваю, что процессы можно получить средствами winapi, но не кодил уже так давно, что толком и не понимаю =( подскажите в какую сторону копать, за любую помощь, буду вам благодарен
|
#2
|
|||
|
|||
На делфи не делал, но такую задачу решал с помощью батника
Код:
@echo off setlocal ENABLEDELAYEDEXPANSION Set Process1=ffmpeg-01 Set Process2=ffmpeg-02 Set Process3=ffmpeg-03 Set Process4=ffmpeg-04 Set Process5=scales Set Process6=clear_files tasklist | Find /i "%Process1%.exe" || (goto Else6) :THEN tasklist | Find /i "%Process2%.exe" || (goto Else6) :THEN tasklist | Find /i "%Process3%.exe" || (goto Else6) :THEN tasklist | Find /i "%Process4%.exe" || (goto Else6) :THEN tasklist | Find /i "%Process5%.exe" || (goto Else6) :THEN tasklist | Find /i "%Process5%.exe" || (goto Else6) :THEN tasklist | Find /i "%Process6%.exe" || (goto Else6) :THEN exit Goto end :ELSE6 echo Else6 taskkill /f /im "%Process1%.exe" taskkill /f /im "%Process2%.exe" taskkill /f /im "%Process3%.exe" taskkill /f /im "%Process4%.exe" taskkill /f /im "%Process5%.exe" taskkill /f /im "%Process6%.exe" /T wscript.exe c:\Users\programist\Desktop\invisible.vbs c:\Users\programist\Desktop\cam1.bat wscript.exe c:\Users\programist\Desktop\invisible.vbs c:\Users\programist\Desktop\cam2.bat wscript.exe c:\Users\programist\Desktop\invisible.vbs c:\Users\programist\Desktop\cam3.bat wscript.exe c:\Users\programist\Desktop\invisible.vbs c:\Users\programist\Desktop\cam4.bat wscript.exe c:\Users\programist\Desktop\invisible.vbs c:\Users\programist\Desktop\clear_files.exe wscript.exe c:\Users\programist\Desktop\invisible.vbs c:\Users\programist\Desktop\scales.bat Exit и батник в планировщике заданий запускается каждую минуту |
#3
|
||||
|
||||
На примере запуска блокнота, нужно лишь на форму кинуть таймер и подключить его обработчик
Код:
uses Tlhelp32; const s = 'Notepad'; function IsRunning(sName :string): boolean; var han: THandle; ProcStruct: PROCESSENTRY32; // from "tlhelp32" in uses clause sID: string; begin Result:= false; // Get a snapshot of the system han:= CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); if han = 0 then exit; // Loop thru the processes until we find it or hit the end ProcStruct.dwSize:= SizeOf(PROCESSENTRY32); if Process32First(han, ProcStruct) then begin repeat sID := ExtractFileName(ProcStruct.szExeFile); // Check only against the portion of the name supplied, ignoring case if UpperCase(Copy(sId, 1, Length(sName))) = UpperCase(sName) then begin // Report we found it Result:= true; Break; end; until not Process32Next(han, ProcStruct); end; // clean-up CloseHandle(han); end; procedure TForm1.Timer1Timer(Sender: TObject); begin if not IsRunning(s) then WinExec(PAnsiChar(s), SW_SHOW); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |