Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.07.2018, 16:34
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию Перезапуск процесса после его закрытия

Здравствуйте друзья, появилась небольшая проблема, есть две запущенные программы (мониторят работу двух станков), примерное каждые пол часа программы закрываются сами собой, после того, как их заново перезапускаю, все снова работает нормально. Теперь хотелось бы как то автоматизировать этот процесс, допустим, что бы программа проверяла каждую секунду список запущенных процессов, и если в этих процессах отсутствуют процессы нужных мне программ, что бы сразу происходил их перезапуск. Подскажите пожалуйста, как можно это реализовать? Я так подозреваю, что процессы можно получить средствами winapi, но не кодил уже так давно, что толком и не понимаю =( подскажите в какую сторону копать, за любую помощь, буду вам благодарен
Ответить с цитированием
  #2  
Старый 23.07.2018, 16:49
dsqwared1 dsqwared1 вне форума
Прохожий
 
Регистрация: 19.07.2018
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

На делфи не делал, но такую задачу решал с помощью батника

Код:
 @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  
Старый 23.07.2018, 17:30
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

На примере запуска блокнота, нужно лишь на форму кинуть таймер и подключить его обработчик
Код:
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;
drkb
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter