Модуль является враппером для 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. В принципе, может пригодится, чтобы не переносить из хидеров вручную.