![]() |
|
|
![]()
|
|
| 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 |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
удаленно
Это сообщение отредактировал(а) SenkraD - 16.2.2010, 15:25 |
|||
|
||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Решил воспользоваться твоим советом, но возникли некоторые трудности Судя по описанию CreateRemoteThread внедряет поток в адресное пространство процесса далее SetUnhandledExceptionFilter устанавливает(или перезаписывает финальный обработчик исключений,если он есть) Вопрос в том если допустим в коде сервера установлен ещё внутрипоточный обработчик исключений,то после его обработки попадет ли он в мою финальную функцию обработки Ексепшена ? Или я не правильно понял принцип работы этого метода ? Спасибо за помощь. -------------------- =))))) ![]() |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
Comm, этот медот SetUnhandledExceptionFilter работает по принципу
"кто последний - тот и папа", так что ты ставишь свой обработчик, а функа тебе возвращает указатель на обработчик, который был до тебя. А дальше можеш обрабатывать сам, можеш сначала вызвать старый потом себя или наоборот. Тебя этот нюанс интересовал? P.S. Ещё вродь есть фун-ка типа AddVectorHandler или как-то так, она добавляет твой обработчик в конец очереди, но не факт что к нему дойдёт вызов - кто-то может вызвать TerminateProcess или что-то подобное, или кто-то пометит исключение как обработаное |
|||
|
||||
| XPyCT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 24.8.2007 Где: Moldova Репутация: 10 Всего: 10 |
Comm,
Уважаемый а какой сервер если не секрет не РФ онлайн часом? |
|||
|
||||
| Comm |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Нет, Counter-Strike\Source
Да, и ещё не понятно как функа CreateRemoteThread работает -------------------- =))))) ![]() |
||||
|
|||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
||||
|
||||
| Platov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.7.2009 Репутация: 2 Всего: 2 |
Может я и не в тему, но почему нельзя написать клиента который приконнектится к серверу и будет ждать когда тот упадёт?
|
|||
|
||||
| Comm |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Информация в ссылках хорошая,всё понятно...а что за инфа в chm файле ?
Потому что после ошибки сервер ещё может частично функционироваь + это не серьезно для программы на АСМ ,эту прогу я решил написать имено на этом языке=)) Почему вопросы задаю здесь ? Потому что отвечают с завидной периодичностью.. Это сообщение отредактировал(а) Comm - 24.2.2010, 15:21 -------------------- =))))) ![]() |
||||
|
|||||
| XPyCT |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 24.8.2007 Где: Moldova Репутация: 10 Всего: 10 |
ну дабы не изобретать велосипед в сервере рфонлайн есть батник который следит за падением екзешника(а это гс сервер) и поднимает его! если интересует могу порытся поискать для вас пс: Раньше держал рф онлайн и часто читерки ложили сервер батник поднимал без проблем |
||||
|
|||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
Было бы хорошо ! -------------------- =))))) ![]() |
|||
|
||||
| XPyCT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 24.8.2007 Где: Moldova Репутация: 10 Всего: 10 |
Автоподъем для любого сервера:
-> Создаём txt файл -> пишем туда код -> меняем название зоны(вашего сервера) на своё -> закрываем сохраняем с расширением BAT -> После кладем в папку где находится зона(ваш сервер) -> Запуск пс: под именем зона понимается World Server сервер World Server.exe
надеюсь вам поможет |
|||
|
||||
| Акакий |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 6.7.2009 Репутация: нет Всего: нет |
Мда... Название темы такое многообещающее... А по существу, т.е. как перехватывать Exception в чужой проге, не сказано ровно ничего.
Это сообщение отредактировал(а) Акакий - 28.7.2010, 16:33 |
|||
|
||||
![]()
|
| Правила форума "С++ 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. |