Форум: "WinAPI";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизСлужбы, SERVICE_CONTROL_SHUTDOWN Найти похожие ветки
← →
Fay © (2006-02-02 09:29) [0]Верно ли, что к SERVICE_CONTROL_SHUTDOWN имеет смысл отнестись так же, как и к SERVICE_CONTROL_STOP?
← →
kaZaNoVa © (2006-02-02 09:32) [1]а что это такое? ))
← →
Digitman © (2006-02-02 09:34) [2]Сравни сам:
SERVICE_CONTROL_STOP
Requests the service to stop. The hService handle must have SERVICE_STOP access.
SERVICE_CONTROL_SHUTDOWN
The ControlService function fails if this control code is specified.
← →
Fay © (2006-02-02 09:35) [3]2 kaZaNoVa © (02.02.06 09:32) [1]
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/handler.asp
← →
Fay © (2006-02-02 09:39) [4]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." Прошу прощения,а что это значит ваще?
← →
Digitman © (2006-02-02 09:50) [5]
> Fay © (02.02.06 09:39) [4]
Это цитата из станд.справки к ф-ции ControlService() .. Ты ведь о ней речь ведешь, насколько я понял ?
> что это значит
Функция возвращает отказ, если указан этот код контрола (т.е. конкретно SERVICE_CONTROL_SHUTDOWN)
← →
Fay © (2006-02-02 09:56) [6]2 Digitman © (02.02.06 09:50) [5]
> ты ведь о ней речь ведешь, насколько я понял ?
Нет, я спрашиваю, как реагировать службе, получившей в Handler(Ex) SERVICE_CONTROL_SHUTDOWN?
← →
Digitman © (2006-02-02 10:01) [7]
> как реагировать службе, получившей в Handler(Ex) SERVICE_CONTROL_SHUTDOWN?
Ну как ? Очевидно, что ей следует немедля (не дольше 20 сек) и по возможности корректно "закругляться по хозяйству".. Ибо контрол этот службе послала система, в которой по тем или иным причинам был инициирован SHUTDOWN
← →
Fay © (2006-02-02 10:06) [8]2 Digitman © (02.02.06 10:01) [7]
Я правильно понимаю, что любая служба должна уметь корректно завершаться за 20 сек?
← →
Fay © (2006-02-02 10:07) [9]Или можно отмазаться, вернув из Handler(Ex) ERROR_CALL_NOT_IMPLEMENTED?
← →
Digitman © (2006-02-02 10:16) [10]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:19) [11]2 Digitman © (02.02.06 10:16) [10]
Спасибо, но я совсем запутался... Как правильно реагировать на SERVICE_CONTROL_SHUTDOWN?
← →
Digitman © (2006-02-02 10:29) [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:32) [13]Аа как происходит "сервис продолжает работать"? Он просто снова запускается?
← →
Digitman © (2006-02-02 10:35) [14]
> Fay © (02.02.06 10:19) [11]
В общем и целом - так же как на SERVICE_CONTROL_STOP.
Но учитывать при этом, что система снимет службу принудительно с исполнения, если служба не завершила свою работу за время, отведенное системой. Ну а раз фигурирует принудительное снятие, то существует определенный риск последующего возникновения нарушений в работе тех или иных подсистем (например, сервис в ходе шатдауна выполняет прямые обращение к файловому носителю инф-ции, которые должны быть полностью выполнены во избежания нарушений в файловой системе)
← →
Digitman © (2006-02-02 10:42) [15]http://www.rsdn.ru/archive/vc/issues/pvc074.htm
← →
Rouse_ © (2006-02-02 10:51) [16]
> Как правильно реагировать на SERVICE_CONTROL_SHUTDOWN?
Выполнить SetServiceStatus для подтверждения получения управляющего кода и в нем же указать сколько тебе необходимо времени для завершения. После этого закруглять сервис.
Но вообще умные люди рекомендуют: цитата: "Соответвтующая служба должна выполнить минимальную совокупность действий, необходимых для сохранения данных ти обратиться к SetServiceStatus, указав состояние SERVICE_STOPPED"
← →
Fay © (2006-02-02 10:52) [17]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 из разных потоков - это разве допустимо без зашиты? Оформить это отдельным вопросом?
← →
Fay © (2006-02-02 10:59) [18]2 Rouse_ © (02.02.06 10:51) [16]
> выполнить минимальную совокупность действий
Я пишу службу, которая реализует витруальный девайс для резервирования базы MSSQL. Процесс резервирования может занять приличное (или даже неприличное) время. Я вот думаю, стоит ли при SERVICE_CONTROL_SHUTDOWN изображать отказ устройства...
← →
Digitman © (2006-02-02 11:06) [19]
> Он использует одну _SERVICE_STATUS из разных потоков - это
> разве допустимо без зашиты?
Как же без защиты ?
Вот же она
if (WaitForSingleObject(eSendPending, 1000)!=WAIT_TIMEOUT) break;
sStatus.dwCheckPoint++;
SetServiceStatus(ssHandle, &sStatus);
← →
Digitman © (2006-02-02 11:08) [20]
> думаю, стоит ли при SERVICE_CONTROL_SHUTDOWN изображать
> отказ устройства
наверно, стоит..
← →
Fay © (2006-02-02 11:10) [21]2 Digitman © (02.02.06 11:06) [19]
> Вот же она
А если в Handler придёт SERVICE_CONTROL_INTERROGATE ?
← →
Digitman © (2006-02-02 11:27) [22]http://www.rsdn.ru/article/baseserv/svcadmin-2.xml
← →
Fay © (2006-02-02 11:31) [23]2 Digitman © (02.02.06 11:27) [22]
Спасибо, почитаю!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.013 c