Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.085 c
15-1193597756
vpbar
2007-10-28 21:55
2007.12.02
Шрифт в объекте Формула (Microsoft Equation)


4-1177050445
vann
2007-04-20 10:27
2007.12.02
Как программно заменить выделенный текст в окне другого приложени


15-1194098631
Vendict
2007-11-03 17:03
2007.12.02
h -> pas


15-1193749434
Черный Шаман
2007-10-30 16:03
2007.12.02
Разводка кабеля питания.


15-1193162399
Студент
2007-10-23 21:59
2007.12.02
Найти величины углов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский