Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.23;
Скачать: CL | DM;

Вниз

OnStop в службе...   Найти похожие ветки 

 
Makhanev Alexander   (2007-07-13 20:31) [0]

Есть служба, которая иногда делает рутинные операции, занимающие ~ минуу (аплоад файлов по фтп).

Тесты показывают, что когда в момент выполнения рутинной операции сервис стопается (программно, через controlservice), то событие OnStop не наступает. Оно и не наступает потом, после завершения операции.

Есть идеи что может быть не так и как выкрутиться?

А то служба потом только вручную стопается..


 
Makhanev Alexander   (2007-07-13 20:39) [1]

когда стопаю вручную в момент уртинных операций, то винда пишет что


> Не удалось остановить службу XXX на Локальный компьютер.
> Эта служба не возвращала ошибки. Возможно, это внутренняя ошибка Windows или внутренняя ошибка службы.
> Если проблема не исчезает, обратитесь к системному администратору.
>


При повторной попытке служба стопается. Но событие OnStop всё равно не ловится.

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


 
atruhin ©   (2007-07-13 22:19) [2]

> хочется понять почему всё же нет события.

Потому что некому на него реагировать. Основной поток сервиса не отвечает.

> Я б рад вынести рутинную операцию в поток, но там это малоцелесообразно

Работать с сетью в асинхронном режиме, не будет подвисания.
Хотя чем не целесообразен доп. поток не понятно.


 
Makhanev Alexander   (2007-07-13 23:19) [3]


> Хотя чем не целесообразен доп. поток не понятно.


я юзаю vcl компонет и если постоянно делать synchronize то в чем смысл потока ? он сможет среагировать на сообщение?


 
atruhin ©   (2007-07-14 04:39) [4]

> я юзаю vcl компонет

Т.е. сервис взаимодействует с рабочим столом? Тогда плохой стиль.
Остается асинхронная работа с сокетом.


 
Makhanev Alexander   (2007-07-14 10:15) [5]


> Т.е. сервис взаимодействует с рабочим столом? Тогда плохой
> стиль.
> Остается асинхронная работа с сокетом.


Он не взаимодействует с раб. столом. Он просто юзает невизуальный компонент ftpClient из ICS. Я точно не знаю, относится оно к VCL или нет и соответсвтенно, можно с ним работать в потоке или нет..


 
Makhanev Alexander   (2007-07-14 10:24) [6]

кстати, а аналога processmessages в сервисах нет?


 
Сергей М. ©   (2007-07-14 11:58) [7]


> Оно и не наступает потом, после завершения операции


И не наступит. Так задумано - OnStop возникает лишь как ответная реакция сервиса на требование SCM остановиться.

Естественно, если сервис чем-то занят и не может вовремя обработать SCM-команду останова (попросту "проспал" ее появление), событие тоже не возникнет.


> аналога processmessages в сервисах нет?


Есть. ProcessRequests()


 
Makhanev Alexander   (2007-07-14 19:43) [8]

всё же ProcessRequests не всегда срабатывал и вариант с цикличным выполнением stop (пока не остановится) пока работает стабильно.

хотя msdn вроде пишет, что после посылки стопа ничего не надо слать...

кто знает, какая здесь есть потенциальная опасность?


     ControlService(hService, SERVICE_CONTROL_STOP, State);
     QueryServiceStatus(hService, State);
     j := 0;
     while (j < 20) and (State.dwCurrentState <> SERVICE_STOPPED) do
     begin
       ControlService(hService, SERVICE_CONTROL_STOP, State);
       Sleep(1000);
       QueryServiceStatus(hService, State);
       Inc(j);
     end;


 
Сергей М. ©   (2007-07-16 08:19) [9]

К чему этот код ?

Код метода Execute приводи.



Страницы: 1 вся ветка

Текущий архив: 2007.09.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
6-1170081738
ildarkh
2007-01-29 17:42
2007.09.23
TIDTCPServer(+SSL Intercept) внутри DLLки


15-1188218498
ANTPro
2007-08-27 16:41
2007.09.23
Книги по Windows&amp;Word


2-1188318256
ElectriC
2007-08-28 20:24
2007.09.23
Блокировка компьютера


2-1188224563
Bora.ru
2007-08-27 18:22
2007.09.23
Запуск программы-ресурса


15-1187712096
Dummy
2007-08-21 20:01
2007.09.23
погода