Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват падения чужой программы 
:(
    Опции темы
Comm
Дата 11.2.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Всем большой привет)

Дело в том что есть игровой сервак,он периодиески падает....нужно отвловить ошибку и перезапустить сервер..

Подскажите в какую сторону рыть...быть может запустить сервер из под какой нибудь апи функции и дальше по плану...или всё гораздо сложнее ?

Спасибо за любую помощь.






--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
SenkraD
Дата 11.2.2010, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



1.) Если есть код сервака, то SetUnhandledExceptionFilter в помощь
2.) Да можно запустить через CreateProcess и потом ждать его через
     WaitForSingleObject. Если он умрёт "нелегальным" путём (функа
     вернёт не WAIT_OBJECT_0), то перезапускай и жди по новой
3.) Можно попытатся хук вцепить с DLL инжектом (но как не скажу - в старых
     исходниках нуно смотреть



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 11.2.2010, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата

Если он умрёт "нелегальным" путём

Всё понятно,спасибо...только уточнить нужно, нелегальным путем это значит слетит намертво,а легальным - его просто закроют .. я правильно понял ? 


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
SenkraD
Дата 11.2.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Цитата(Comm @  11.2.2010,  18:26 Найти цитируемый пост)
а легальным - его просто закроют .. я правильно понял
ага, только, если мне память не изменяет,
нуно помнить, что вызов TerminateProcess является нелегальным тушением



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 12.2.2010, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Спасибо запомощь,тему н закрываю т.к. возможны ещё вопросы  smile 


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 14.2.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Использование ф-и WaitForSingleObject не дало нужных результатов, так-как она срабатывает только после полной остановки подопечного приложения ((

Другими словами если происходит  ошибка и рядом никого нет ктобы мог нажать на "ОК" окна выскачившей ошибки то WaitForSingleObject так и провесит ожидая ... вот

Пробовал так же при возникновении ошибки сервера проверять состояние главного потока подопечного приложения, т.е.  работает он или приостановлен,я раньше думал если ошибка появилась то поток должен быть приостановлен... но увы 

Так же пробовал после CreateProcess без ф-и ожидания  WaitForSingleObject  проверять периодически функцией GetExitCodeProcess код возврата... всё бы хорошо если GetExitCodeProcess >0 то ошибка,но и STILL_ACTIVE(означает что процес ещё работает) тоже больше нуля... и как тут определить что по чем фиг знает..


Какие будут предложения ? Спасибо всем )

Это сообщение отредактировал(а) Comm - 14.2.2010, 17:26


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
bra1ny
Дата 15.2.2010, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 1
Всего: 3



После ошибки поток не завершается , а висит в подвешенном состоянии это вы правильно заметили.

Самый просто вариант , искать это окно с ошибками через FindWindow и прибивать процесс а потом запускать заново.
 
Или можно попробовать в реестре в ключе  HKLM\Software\Microsoft\Windows NT\AeDebug  свой сервер там прописать , потом также искать это окно с ошибкой и нажимать кнопку отмена и все. 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
Comm
Дата 15.2.2010, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата

Самый просто вариант , искать это окно с ошибками через FindWindow и прибивать процесс а потом запускать заново.

Я тоже об этом думал,узнать хендл окна сервера и при появлении ошибки сравнить ,хендл окна ошибки и сервера... Ну и сделать выводы как говорится..

Но ошибки бывают в виде "Отправить отчет об ошибке" вопрос в том совпадет ли хендл окна этой ошибки с серврным ...

Спасибо за внимание)


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
SenkraD
Дата 15.2.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Comm, тогда уже лучше периодически делать snapshot
процессов и искать там ваш сервак, и перезапускать его если его там нет.

P.S. А вообще, щас подумаю, что можно ещё сделать



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
bra1ny
Дата 15.2.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 1
Всего: 3



так отключите windows error reporting и не будет этого окна с отправкой отчета. мой компутер -> правая кнопка мыши -> свойства ->дополнительно ->Отчет об ошибках. 
И тупо ишите по заголовку окна , как я вам посоветовал. 

Цитата

Comm, тогда уже лучше периодически делать snapshot
процессов и искать там ваш сервак, и перезапускать его если его там нет.

С чего его там не будет? Процесс будет висеть пока не выберут один из пунктов .
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
Comm
Дата 15.2.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Вот Вам обоим пока по + а я пойду все это длао попробую, и отпишусь ))) а если что ещё придумаете ,пишите не стесняйтесь =)


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
SenkraD
Дата 15.2.2010, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Comm, bra1ny, что скажете на CreateRemoteThread(или инжект),
который ставит фильтр исключений посредством SetUnhandledExceptionFilter с нужной
тебе логикой?


Это сообщение отредактировал(а) SenkraD - 15.2.2010, 15:55


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Comm
Дата 15.2.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата

Comm, bra1ny, что скажете на CreateRemoteThread(или инжект),
который ставит фильтр исключений посредством SetUnhandledExceptionFilter с нужной
тебе логикой?


Мм я думаю что данный способ в этой ситуации не очень,так как стандартная обработка  возможно продолжает работу сервера при появлении какого либо исключения...мы этого к сожалению не знаем 

Я вот тут думаю можно ли при появлении ошибки,зная хендл окна этой ошибки...определить какая стандартная иконка в нем установлена, т.е. ошибка там уведомление и тд итп  ???


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
RatHat
Дата 16.2.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



если сервак твой, и есть возможность его модифицировать, то вариантов есть много.
Например (достаточно тупой вариант): влепить там отдельным потоком серверный сокет, на который внешняя программка-guard будет периодически стучаться и спрашивать состояние. Ну и, если получает корректный ответ, то всё нормально. Ну а если ненормально, то уже перезапускать. 

Ну а если сервак чужой, то (еще более тупой вариант) просто пинговать сервер, и, когда он ложится (если он, конечно, ложится намертво и не пингуется), перезапускать...

А по умному тебе уже Senkrad  и bra1ny предложили ^^


Это сообщение отредактировал(а) RatHat - 16.2.2010, 13:49
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
azesmcar
Дата 16.2.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



удалено

Это сообщение отредактировал(а) azesmcar - 16.2.2010, 15:23
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.