Работа со службами

Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.

Модератор: Brickgroup

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Работа со службами

Сообщение alibek » 19.05.2007 (Сб) 14:27

Модуль является враппером для API-функций по работе со службами.
Модуль позволяет получать список служб, информацию по службе (статус и конфигурацию), а также управлять сервисами -- запускать, останавливать, приостанавливать и возобновлять.
Все операции интерактивны, имеется возможность отображать прогресс (процедура ProgressProc) и отменять операцию.
Все юникодовское (уж не знаю, насколько это нужно, но вдруг кому пригодится). Также в наличии имеются типы и перечисления из H-файлов, приведенные к VB.
В модуле есть ряд публичный переменных (начинающихся с SVC).
Краткое описание методов и свойств:

Свойства:
SVC_CancelServiceOperation As Boolean -- флаг, указывающий что пользователь отменил операцию. Обрабатывается в методах управления службами (запуск/остановка).
SVC_ServiceControlFail As Boolean -- флаг, указывающий что при работе со службой возникла ошибка и следует прекратить дальнейшую обработку. Например, последовательно останавливается несколько служб и возник сбой при остановке одной из них, в этом случае этот флаг позволит не останавливать остальные.
SVC_ErrorCode As Long -- код ошибки при работе со службой, соответствует Err.LastDLLError.
SVC_ErrorMessage As String -- текст сообщения об ошибке, возвращаемый методами.
SVC_ErrorDetails As String -- системный текст сообщения об ошибке (соответствующий ErrorCode).
SVC_ProgressBar As PictureBox, SVC_ProgressFrom As Single, SVC_ProgressTo As Single -- эти переменные используются в private-процедуре ProgressProc. Эту процедуру (и переменные, использующиеся в ней) следует оформлять в соответствии с конкретной задачей.

Методы: (начинаются с SVC_)

SVC_ListServices(ByRef Services() As ServiceInfoType) As Boolean
Возвращает список сервисов в массиве. Если операция выполнена успешно, функция возвращает True, в противном случае False и в SVC_ErrorCode будет код ошибки.

SVC_Exists(Optional ByVal ServiceName As String, Optional ByVal DisplayName As String) As Boolean
Функция проверяет, существует ли сервис с указанным названием; название можно задавать именем сервиса и отображаемым наименованием, имя сервиса имеет приоритет. Если операция выполнена успешно, функция возвращает True, в противном случае False и в SVC_ErrorCode будет код ошибки.

SVC_GetDisplayName(ByVal ServiceName As String) As String
Получить отображаемое наименование сервиса по его имени. Если сервис не существует, возвращается пустая строка. Если в процессе доступа к списку сервисов произошла ошибка, она будет в SVC_ErrorCode.

SVC_GetServiceName(ByVal DisplayName As String) As String
Получить имя сервиса по его отображаемому наименованию. Если сервис не сущетствует, будет возвращена пустая строка. Если в процессе доступа к списку сервисов произошла ошибка, она будет в SVC_ErrorCode.

SVC_QueryServiceStatus(ByVal ServiceName As String, ByRef Status As ServiceStatusType) As Boolean
Получить информацию о статусе сервиса, информация возвращается в Status. Если операция выполнена успешно, функция возвращает True, в противном случае False и в SVC_ErrorCode будет код ошибки.

SVC_QueryServiceConfig(ByVal ServiceName As String, ByRef Config As ServiceConfigType) As Boolean
Получить информацию о конфигурации сервиса, информация возвращается в Config. Если операция выполнена успешно, функция возвращает True, в противном случае False и в SVC_ErrorCode будет код ошибки.

SVC_State(ByVal ServiceName As String) As ServiceStates
Получить информацию о текущем состоянии сервиса (запущен/не запущен). Если в процессе запроса информации произошла ошибка, она будет в SVC_ErrorCode.

SVC_Start(ByVal ServiceName As String, Optional ByVal Timeout As Long) As Boolean
SVC_Stop(ByVal ServiceName As String, Optional ByVal Timeout As Long) As Boolean
SVC_Pause(ByVal ServiceName As String, Optional ByVal Timeout As Long) As Boolean
SVC_Continue(ByVal ServiceName As String, Optional ByVal Timeout As Long) As Boolean
Управление сервисом. Если таймаут не задается, он запрашивается в настройках самого сервиса. Процесс управления может сопровождаться отображением прогресса операции, операцию можно отменить. Если операция выполнена успешно, функция возвращает True, в противном случае False и в SVC_ErrorCode будет код ошибки.

Опрос идет с интервалом Timeout/10, но не менее 1 секунды и не более 10 секунд. Опрос идет не через таймер (хотя первоначально хотел именно так), а циклом с DoEvents внутри.

В модуле не реализовано получение привилегий. В Windows 2000 (и с правами Power User) все работает, права администратора не требуются. Возможно, в Windows XP работать не будет, пока не на чем проверить.

Да, еще в модуле есть перечисление для всех основных кодов ошибок Windows API. В принципе, может пригодится, чтобы не переносить из хидеров вручную.
Вложения
Services.zip
Модуль работы со службами.
(12.71 Кб) Скачиваний: 264
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 19.05.2007 (Сб) 16:31

Никто не хочет оформлять кирпичи в соотсветсвии с шаблоном, предложенным мною :( .

Неужели удобнее лезть на форум, искать этот топик с описанием функций, чем держать рядом с кодом небольшой файл с документацией и примерами? <со стороны пользователя кирпича>
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.05.2007 (Сб) 16:45

Ну вообще-то сущности методов очевидны по их наименованиям.
SVC_Start "Alerter" - запустить службу Alerter.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 19.05.2007 (Сб) 16:49

Но тем не менее, ты ведь написал под каждой функцией пару-тройку предложений? А что мешало написать то же самое в вордовский файл?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Кирпичный завод

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList  
cron