Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.011 c
15-1144041846
07BB
2006-04-03 09:24
2006.04.23
Что ты сделал для своего народа, города,страны???


3-1141384511
Валерий
2006-03-03 14:15
2006.04.23
обновление данных


3-1141207231
_RusLAN
2006-03-01 13:00
2006.04.23
Firebird. IBExpert. Помогите разобраться с Backup/Restore


2-1144441233
Gamer
2006-04-08 00:20
2006.04.23
Проблема с нетипизированным файлом


15-1143890525
Alexander Panov
2006-04-01 15:22
2006.04.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский