Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
2-1188310061
sinoptikmoscow
2007-08-28 18:07
2007.09.23
сравнение строк


15-1187867268
oldman
2007-08-23 15:07
2007.09.23
ННМП-2007


2-1188379446
Женя_кэт
2007-08-29 13:24
2007.09.23
Запись RTF файла в БД


15-1187157030
Alien1769
2007-08-15 09:50
2007.09.23
КМП-2007


11-1172162117
kotlf
2007-02-22 19:35
2007.09.23
под win2000 arial показывает квадратики





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский