Поиск запущеного процесса

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Поиск запущеного процесса

Сообщение sign » 29.07.2011 08:27:04

В Delphi для того, чтобы определить запущен ли денвер, а если нет, запустить, использую такой вот способ:

Код: Выделить всё
const PROCESS_TERMINATE=$0001;
var Co, fnd: Boolean;
    FS: THandle;
    FP: TProcessEntry32;
begin
  FS := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  FP.dwSize := Sizeof(FP);
  Co := Process32First(FS,FP);
  fnd := False;
  while integer(Co) <> 0 do begin
    if FP.szExeFile = 'TrayApache.exe' then begin
      fnd := True;
      Break;
    end;
    Co:=Process32Next(FS,FP);
  end;
  if not fnd then
    ShellExecute(0, 'open', 'E:\WebServers\denwer\Run.exe', nil, nil, 0);


В лазарусе запускаю каждый раз денвер, ибо не знаю, как проверить, запущен ли соответствующий процесс или нет.
Код: Выделить всё
var
   AProcess: TProcess;
begin
  AProcess := TProcess.Create(nil);
  AProcess.CommandLine := 'E:\WebServers\denwer\Run.exe';
  AProcess.Options := AProcess.Options + [poWaitOnExit];
  AProcess.Execute;
  AProcess.Free;   


Относительно Лазаруса - как определить, запущен некий сторонний процесс или нет?
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Поиск запущеного процесса

Сообщение Brainenjii » 29.07.2011 08:38:08

Код: Выделить всё
{$IFDEF windows}
  SomeWinAPIFunctionForCheckStatusOfProcess(SomeParams);
{$ENDIF}
{$IFDEF unix}
  SomeFunctionWithParsingOf_PS_AX_GREP_SOMEPROCESS_Result(SomeParams);
{$ENDIF}

Я бы делал так ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Поиск запущеного процесса

Сообщение Odyssey » 29.07.2011 12:35:19

Когда-то решал такую же проблему, правда не с Денвером, а с Mongoose. Тут есть ещё одна сложность: процесс сервера может быть запущен, но это может быть не наш процесс, а какой-то другой -- запущенный из другой директории, и для других целей. Никто же не запрещает пользователю держать на компе два денвера.

Поэтому для себя решил проблему так:
1) В htdocs сервера создаю директорию с идентифицирующим файлом, в котором хранится одна уникальная строка (GUID, название приложения, и т.п.)
2) В программе-запускалке с помощью Ararat Synapse подключаюсь к серверу, запрашиваю этот идентифицирующий файл, читаю оттуда строчку и сравниваю её с эталоном.
3) Если удалось подключиться, файл найден и строчка совпала -- значит наш сервер уже работает. В противном случае его нужно запустить.

Если интересуют исходники -- могу выложить.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Поиск запущеного процесса

Сообщение sign » 30.07.2011 11:43:12

Спасибо, не откажусь.
:D
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Поиск запущеного процесса

Сообщение Odyssey » 30.07.2011 16:00:57

См. приложенный архив. Это готовая программа, запускающая сервер и браузер на основе информации из конфигурационного файла. Пример конфигурационного файла лежит в ./bin, пример файла с идентифицирущей строчкой -- в ./htdocs. Исходник -- ./qlauncher.lpr, сабжевый код -- в методе TWebAppLauncher.WebServerIsRunning.
Для компиляции потребуется Ararat Synapse, исходники которого нужно будет положить в ./libs/synapse. Ещё есть зависимость от LCL (FileUtil.UTF8ToSys).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Поиск запущеного процесса

Сообщение sign » 01.08.2011 14:14:19

Спасибо.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru