Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отловить завершение работы Windows из под сервиса? [D6, WinXP]


mx ©   (2007-10-16 09:44:00) 

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

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

Заранее Всем спасибо.


mx   (2007-10-16 14:53:00) [1]

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


Сергей М.   (2007-10-16 14:05:00) [2]

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


Dmitry S   (2007-10-16 13:33:00) [3]

А что, завершения не произойдет, если сервис откажется останавливаться?


Сергей М.   (2007-10-16 11:04:00) [4]

procedure TMyService.MyServiceStop(Sender: TService; var Stopped: Boolean);
begin
 Stopped := True;
end;


mx   (2007-10-16 10:54:00) [5]


> Сергей М. ©   (16.10.07 10:46) [3]
> Поэтому Windows подает сервису команду SERVICE_CONTROL_STOP,
>  на которую твой сервис должен немедленно отреагировать
> и завершить свою работу.


Если не сложно, дай пожалуйста маленький кусочек кода


Сергей М.   (2007-10-16 10:46:00) [6]


> Windows не может завершить работу при запущенном сервисе


Поэтому Windows подает сервису команду SERVICE_CONTROL_STOP, на которую твой сервис должен немедленно отреагировать и завершить свою работу.


mx   (2007-10-16 10:28:00) [7]

пробывал так, не получилось поймать момент :(

private
procedure WCL(var Message:TWMQueryEndSession); message WM_QUERYENDSESSION;

procedure TSclient.WCL(var Message: twmqueryendsession);
begin
  message.result:=1;
  message.msg:=wm_endsession;
 {здесь завершаю сервис}
end;


tesseract   (2007-10-16 10:14:00) [8]

Обрабатывать WM_QUERYENSESSION. lParam - ноль в случае завершение работы.


Наверх

Титульная страница Поиск, карта сайта Написать письмо