![]() |
|
|
![]()
|
|
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Всем большой привет)
Дело в том что есть игровой сервак,он периодиески падает....нужно отвловить ошибку и перезапустить сервер.. Подскажите в какую сторону рыть...быть может запустить сервер из под какой нибудь апи функции и дальше по плану...или всё гораздо сложнее ? Спасибо за любую помощь. -------------------- =))))) ![]() |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
1.) Если есть код сервака, то SetUnhandledExceptionFilter в помощь
2.) Да можно запустить через CreateProcess и потом ждать его через WaitForSingleObject. Если он умрёт "нелегальным" путём (функа вернёт не WAIT_OBJECT_0), то перезапускай и жди по новой 3.) Можно попытатся хук вцепить с DLL инжектом (но как не скажу - в старых исходниках нуно смотреть |
|||
|
||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Всё понятно,спасибо...только уточнить нужно, нелегальным путем это значит слетит намертво,а легальным - его просто закроют .. я правильно понял ? -------------------- =))))) ![]() |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
ага, только, если мне память не изменяет,
нуно помнить, что вызов TerminateProcess является нелегальным тушением |
|||
|
||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Спасибо запомощь,тему н закрываю т.к. возможны ещё вопросы
-------------------- =))))) ![]() |
|||
|
||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Использование ф-и WaitForSingleObject не дало нужных результатов, так-как она срабатывает только после полной остановки подопечного приложения ((
Другими словами если происходит ошибка и рядом никого нет ктобы мог нажать на "ОК" окна выскачившей ошибки то WaitForSingleObject так и провесит ожидая ... вот Пробовал так же при возникновении ошибки сервера проверять состояние главного потока подопечного приложения, т.е. работает он или приостановлен,я раньше думал если ошибка появилась то поток должен быть приостановлен... но увы Так же пробовал после CreateProcess без ф-и ожидания WaitForSingleObject проверять периодически функцией GetExitCodeProcess код возврата... всё бы хорошо если GetExitCodeProcess >0 то ошибка,но и STILL_ACTIVE(означает что процес ещё работает) тоже больше нуля... и как тут определить что по чем фиг знает.. Какие будут предложения ? Спасибо всем ) Это сообщение отредактировал(а) Comm - 14.2.2010, 17:26 -------------------- =))))) ![]() |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 1 Всего: 3 |
После ошибки поток не завершается , а висит в подвешенном состоянии это вы правильно заметили.
Самый просто вариант , искать это окно с ошибками через FindWindow и прибивать процесс а потом запускать заново. Или можно попробовать в реестре в ключе HKLM\Software\Microsoft\Windows NT\AeDebug свой сервер там прописать , потом также искать это окно с ошибкой и нажимать кнопку отмена и все. --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Я тоже об этом думал,узнать хендл окна сервера и при появлении ошибки сравнить ,хендл окна ошибки и сервера... Ну и сделать выводы как говорится.. Но ошибки бывают в виде "Отправить отчет об ошибке" вопрос в том совпадет ли хендл окна этой ошибки с серврным ... Спасибо за внимание) -------------------- =))))) ![]() |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
Comm, тогда уже лучше периодически делать snapshot
процессов и искать там ваш сервак, и перезапускать его если его там нет. P.S. А вообще, щас подумаю, что можно ещё сделать |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 1 Всего: 3 |
так отключите windows error reporting и не будет этого окна с отправкой отчета. мой компутер -> правая кнопка мыши -> свойства ->дополнительно ->Отчет об ошибках.
И тупо ишите по заголовку окна , как я вам посоветовал.
С чего его там не будет? Процесс будет висеть пока не выберут один из пунктов . --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Вот Вам обоим пока по + а я пойду все это длао попробую, и отпишусь ))) а если что ещё придумаете ,пишите не стесняйтесь =)
-------------------- =))))) ![]() |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
Comm, bra1ny, что скажете на CreateRemoteThread(или инжект),
который ставит фильтр исключений посредством SetUnhandledExceptionFilter с нужной тебе логикой? Это сообщение отредактировал(а) SenkraD - 15.2.2010, 15:55 |
|||
|
||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Мм я думаю что данный способ в этой ситуации не очень,так как стандартная обработка возможно продолжает работу сервера при появлении какого либо исключения...мы этого к сожалению не знаем Я вот тут думаю можно ли при появлении ошибки,зная хендл окна этой ошибки...определить какая стандартная иконка в нем установлена, т.е. ошибка там уведомление и тд итп ??? -------------------- =))))) ![]() |
|||
|
||||
| RatHat |
|
|||
![]() Вождь индейцев ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
удалено
Это сообщение отредактировал(а) azesmcar - 16.2.2010, 15:23 |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |