|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Выполнение событий если программа уничтожается диспетчером задач
Добрый день! Вопрос.
В событии OnClose программы отсылается udp пакет на сервер, мол, программа закрыта. Но если закрывать программу с помощью диспетчера задач, то событие не выполняется, я искал по теме в гугле, читал книги, но ничего не нашёл. Подскажите пожалуйста новичку как сделать так чтобы при закрытии приложения через диспетчер задач всё равно выполнялись необходимые функции! |
#2
|
||||
|
||||
OnCloseQuery.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
Цитата:
|
#4
|
|||
|
|||
На самом деле - практически никак.
Более того, OnClose и OnCloseQuery могут не сработать дяже просто при закрытии сессии (сам "нарвался"). Если разговор идет о закрытии через Диспетчер задач, то надо хукать TerminateProcess, который, на самом-то деле, сам убиваемый процесс и не спрашивает ниочем. Просто гасит без всякой жалости. Тут лучше построить другую схему, т.к. существующая все-равно не защитит от всех возможный способов/причин умирания процесса. Лучше пусть приложение периодически посылает пакет, что оно все еще живо, а сервер просто проверяет когда последний раз пришел такой пакет и принисает решение - жив клиент или нет. |
#5
|
||||
|
||||
При закрытии сессии можно из-под WMQueryEndSession слать, до установки результата в единицу ( Msg.Result:= 1; )
а в OnCloseQuery так Код:
procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin ... // вот здесь шлём CanClose:= true; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#6
|
||||
|
||||
на самом деле и OnClose и OnCloseQuery вызываются, если диспетчером снять задачу (вкладка Приложения), а не завершить процесс (вкладка Процессы).
Пишу программы за еду. __________________ |