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

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

Службы, SERVICE_CONTROL_SHUTDOWN


Страницы:   1 2

Fay ©   (2006-02-02 09:29:00) 

Верно ли, что к SERVICE_CONTROL_SHUTDOWN имеет смысл отнестись так же, как и к SERVICE_CONTROL_STOP?


Fay   (2006-02-02 11:31:00) [1]

2 Digitman ©   (02.02.06 11:27) [22]
Спасибо, почитаю!


Digitman   (2006-02-02 11:27:00) [2]

http://www.rsdn.ru/article/baseserv/svcadmin-2.xml


Fay   (2006-02-02 11:10:00) [3]

2 Digitman ©   (02.02.06 11:06) [19]
> Вот же она
А если в Handler придёт SERVICE_CONTROL_INTERROGATE ?


Digitman   (2006-02-02 11:08:00) [4]


> думаю, стоит ли при SERVICE_CONTROL_SHUTDOWN изображать
> отказ устройства


наверно, стоит..


Digitman   (2006-02-02 11:06:00) [5]


> Он использует одну _SERVICE_STATUS из разных потоков - это
> разве допустимо без зашиты?


Как же без защиты ?

Вот же она

if ( WaitForSingleObject(eSendPending, 1000)!=WAIT_TIMEOUT) break;
        sStatus.dwCheckPoint++;
        SetServiceStatus(ssHandle, &sStatus);


Fay   (2006-02-02 10:59:00) [6]

2 Rouse_ ©   (02.02.06 10:51) [16]
> выполнить минимальную совокупность действий
Я пишу службу, которая реализует витруальный девайс для резервирования базы MSSQL. Процесс резервирования может занять приличное (или даже неприличное) время. Я вот думаю, стоит ли при SERVICE_CONTROL_SHUTDOWN изображать отказ устройства...


Fay   (2006-02-02 10:52:00) [7]

2 Digitman ©   (02.02.06 10:35) [14]
Спасибо.

> http://www.rsdn.ru/archive/vc/issues/pvc074.htm
Я уже читал эту статью - там по моему вопросу меньше, чем в этой ветке.

P.S.
> http://www.rsdn.ru/archive/vc/issues/pvc074.htm
Читал его код... Он использует одну _SERVICE_STATUS из разных потоков - это разве допустимо без зашиты? Оформить это отдельным вопросом?


Rouse_   (2006-02-02 10:51:00) [8]


> Как правильно реагировать на SERVICE_CONTROL_SHUTDOWN?

Выполнить SetServiceStatus для подтверждения получения управляющего кода и в нем же указать сколько тебе необходимо времени для завершения. После этого закруглять сервис.
Но вообще умные люди рекомендуют: цитата: "Соответвтующая служба должна выполнить минимальную совокупность действий, необходимых для сохранения данных ти обратиться к SetServiceStatus, указав состояние SERVICE_STOPPED"


Digitman   (2006-02-02 10:42:00) [9]

http://www.rsdn.ru/archive/vc/issues/pvc074.htm


Digitman   (2006-02-02 10:35:00) [10]


> Fay ©   (02.02.06 10:19) [11]


В общем и целом - так же как на SERVICE_CONTROL_STOP.

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


Fay   (2006-02-02 10:32:00) [11]

Аа как происходит "сервис продолжает работать"? Он просто снова запускается?


Digitman   (2006-02-02 10:29:00) [12]


> Fay ©   (02.02.06 10:06) [8]
> Я правильно понимаю, что любая служба должна уметь корректно
> завершаться за 20 сек?


Не совсем так.
Никто не обязывает службу завершаться в отведенные по дифолту 20 сек. (см. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control, параметр WaitToKillServiceTimeout = 20000).
Если служба не укладывается в это время, она должна вернуть сервис-контроллеру статусное сообщение STOP_PENDING, чтобы сервис-контроллер знал сколько времени ему выждать (но не более WaitToKillServiceTimeout миллисекунд) перед тем как послать системе отчет о полном шатдауне службы.


Fay   (2006-02-02 10:19:00) [13]

2 Digitman ©   (02.02.06 10:16) [10]
Спасибо, но я совсем запутался... Как правильно реагировать на SERVICE_CONTROL_SHUTDOWN?


Digitman   (2006-02-02 10:16:00) [14]

The SERVICE_CONTROL_SHUTDOWN control code should only be processed by services that must absolutely clean up during shutdown, because there is a limited time (about 20 seconds) available for service shutdown. After this time expires, system shutdown proceeds regardless of whether service shutdown is complete. Note that if the system is left in the shutdown state (not restarted or powered down), the service continues to run.

Контрол SERVICE_CONTROL_SHUTDOWN следует обрабатывать  тем сервисам, которые должны полностью завершить работу во время шатдауна, потому что в система подразумевает ограниченное время (по дифолту около 20 сек.), в течение которого сервис должен завершить свое выполнение. По истечению этого времени системный шатдаун будет продолжен или остановлен в зависимости от того, успешно ли выполнен шатдаун сервиса. Обратите внимание на то, что если система вышла из состояния шатдауна (т.е. рестарт или завершение были отменены), сервис продолжает работать.


Fay   (2006-02-02 10:07:00) [15]

Или можно отмазаться, вернув из Handler(Ex) ERROR_CALL_NOT_IMPLEMENTED?


Fay   (2006-02-02 10:06:00) [16]

2 Digitman ©   (02.02.06 10:01) [7]
Я правильно понимаю, что любая служба должна уметь корректно завершаться за 20 сек?


Digitman   (2006-02-02 10:01:00) [17]


> как реагировать службе, получившей в Handler(Ex) SERVICE_CONTROL_SHUTDOWN?


Ну как ? Очевидно, что ей следует немедля(не дольше 20 сек) и по возможности корректно "закругляться по хозяйству".. Ибо контрол этот службе послала система, в которой по тем или иным причинам был инициирован SHUTDOWN


Fay   (2006-02-02 09:56:00) [18]

2 Digitman ©   (02.02.06 09:50) [5]
> ты ведь о ней речь ведешь, насколько я понял ?
Нет, я спрашиваю, как реагировать службе, получившей в Handler(Ex) SERVICE_CONTROL_SHUTDOWN?


Digitman   (2006-02-02 09:50:00) [19]


> Fay ©   (02.02.06 09:39) [4]


Это цитата из станд.справки к ф-ции ControlService() .. Ты ведь о ней речь ведешь, насколько я понял ?


> что это значит


Функция возвращает отказ, если указан этоткод контрола (т.е. конкретно SERVICE_CONTROL_SHUTDOWN)


Fay   (2006-02-02 09:39:00) [20]

2 Digitman ©   (02.02.06 09:34) [2]
1) Это откуда? Я нашёл только это.

SERVICE_CONTROL_SHUTDOWN
Notifies a service that the system is shutting down so the service can perform cleanup tasks.
For more information, see the Remarks section of this topic.

SERVICE_CONTROL_STOP
Notifies a service that it should stop.

2) "The ControlService function fails if this control code is specified." Прошу прощения,а что это значит ваще?


Страницы:   1 2

Наверх

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