Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

Как узнать запущено ли приложение или нет?   Найти похожие ветки 

 
Destroyer   (2007-11-05 16:54) [0]

Ситуация такая:
Нужно через веб интерфейс запускать и останавливать игровой сервер.
Сервер на win, php может запустить ехе-шник по запросу с веб странички. Но корректно обработать ситуацию не получается- запущен сервер или нет, остановить сервер и в зависимости от этого выполнить некие действия. Было решено сделать лоадер на Delphi, который запускается с веб странички и он уже делает всю нужную работу.
Запускает игровой сервер (консольный) с помощью shellexecute, получает в результате хэндл, записывает его и закрывается. Если не запкрыться, то проблема с php (т.к. все под win). Вопрос - как при следующем запуске этого лоадера узнать запущен ли все еще этот игровой сервер или нет?


 
SergeyIT   (2007-11-05 17:43) [1]

Не раз обсуждалось здесь. Поищите. Запуск 1 копии приложения.
А вообще - при запуске сервер создает мьютекс, а лоадер проверяет его.
А останов - через сообщение.


 
Destroyer   (2007-11-05 17:50) [2]


> Запуск 1 копии приложения

Игровой сервер-то не мой, а всем известный Couter-Strike Source.
Как найти мьютекс?


 
SergeyIT   (2007-11-05 18:21) [3]

Тогда наверно искать по имени файла процесса - тоже обсуждалось на форуме. А вот как правильно остановить? Это надо придумать.


 
Destroyer   (2007-11-05 19:30) [4]

Как найти - по имени файла уже сделал.
А вот остановить... надо в консоли сервера написать quit...
Пока не знаю как.


 
Destroyer   (2007-11-05 20:49) [5]

Такой вопрос:
Зная путь к запущенному exe-шнику хочу его закрыть, как это сделать?
То что закрытие будет некорректным - ничего страшного.
TerminateProcess требует хэндл процесса, как его найти? Или есть другой способ?


 
SergeyIT   (2007-11-05 23:29) [6]

Вот как когда-то фтп сервер выгружал:

 hsn := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 b := FALSE;
 entry.dwSize := Sizeof(TProcessEntry32);
 if Process32First(hsn, entry) then
 begin
   while NOT b do
   begin
     s := StrLower(entry.szExeFile);
     if Pos("slimftpd.exe", s) > 0 then
     begin
       hproc := OpenProcess(PROCESS_TERMINATE, FALSE, entry.th32ProcessID);
       TerminateProcess(hproc, 1);
       b := TRUE;
       CloseHandle(hproc);
        break;
     end;
   end;
 end;
 CloseHandle(hsn);

Может можно как-то и в консоль сервера что-то записать - поищите...


 
Destroyer   (2007-11-05 23:45) [7]

Да, похожий код очень часто встречается при поиске. Но проблема в том, что запущено несколько игровых серверов, имена их ехе-шников одинаковые - srcds.exe, только запускаются они из разных мест. Как бы выгрузить именно тот, что лежит в указанном мной пути?


 
SergeyIT   (2007-11-05 23:59) [8]

Простейшее, что приходит в голову - поменяйте им имя файла в разных местах.


 
Destroyer   (2007-11-06 01:17) [9]

Это да, но серверы апдейтятся и все встает на свои места, хотелось поуниверсальнее..



Страницы: 1 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
15-1193785860
Германн
2007-10-31 02:11
2007.12.02
Directory is busy


15-1193855197
xayam
2007-10-31 21:26
2007.12.02
Кто-нибудь пользовался в mysql 5 fulltext ом?


2-1194450966
Kick
2007-11-07 18:56
2007.12.02
UDPClient, UDPServer, TCPClient, TCPServer


2-1194270848
Destroyer
2007-11-05 16:54
2007.12.02
Как узнать запущено ли приложение или нет?


11-1179326027
Ned
2007-05-16 18:33
2007.12.02
Пример по работе с PNG