Форум: "Начинающим";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
ВнизКак узнать запущено ли приложение или нет? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c