Главная страница
    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.46 MB
Время: 0.039 c
3-1179737093
barakuda
2007-05-21 12:44
2007.09.23
adotable + excel


2-1188455990
mfender
2007-08-30 10:39
2007.09.23
TIdPOP3 - ошибка


2-1188367095
Человек
2007-08-29 09:58
2007.09.23
Запаковать надо файл


2-1188305625
Shad
2007-08-28 16:53
2007.09.23
Работа с другими программами


2-1188261728
ven0m
2007-08-28 04:42
2007.09.23
Доступ к элементам веб-формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский