Вход/Регистрация
Системное программирование в среде Windows
вернуться

Харт Джонсон М.

Шрифт:

Опрос состояния службы

Для получения структурой SERVICE_STATUS текущего состояния службы используется следующая функция: 

BOOL QueryServiceStatus(SC_HANDLE hService, LPSERVICE_STATUS lpServiceStatus)
 

Резюме: функционирование и управление службой

На рис. 13.1 показано, каким образом SCM связан со службами и программой управления службами, подобной программе 13.3, которая рассматривается в следующем разделе. В частности, SCM должен зарегистрировать службу, и все команды, предназначенные для службы, должны пропускаться через SCM. 

Рис. 13.1. Управление службами Windows через SCM

Пример:команднаяоболочкауправленияслужбами

Управление службами часто осуществляется посредством утилит, входящих в группу Administrative Tools, доступ к которым открывается через пиктограмму Services (Службы). Для управления пользовательскими службами можно также использовать оболочку ServiceShell (программа 13.3), представляющую собой видоизмененный вариант программы JobShell из главы 6 (программа 6.3).

Программа 13.3. ServiceShell: программа управления службами

/* Глава 13. */

/* ServiceShell.с. Программа командной оболочки управления службами Windows.

Эта программа является видоизмененным вариантом программы управления задачами из главы 6, но только управляет службами, а не задачами. */

/* Поддерживаемые команды:

create — создание службы

delete – удаление службы

start – запуск службы

control – управление службой */

#include "EvryThng.h"

static SC_HANDLE hScm;

static BOOL Debug;

int _tmain(int argc, LPTSTR argv[]) {

 BOOL Exit = FALSE;

 TCHAR Command[MAX_COMMAND_LINE + 10], *pc;

 DWORD i, LocArgc; /* Локальный параметр argc. */

 TCHAR argstr[MAX_ARG][MAX_COMMAND_LINE];

 LPTSTR pArgs[MAX_ARG];

 /* Подготовить локальный массив "argv" в виде указателей на строки. */

 for (i = 0; i < MAX_ARG; i++) pArgs[i] = argstr[i];

 /* Открыть диспетчер управления службами на локальной машине. */

 hScm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

 /* Главный цикл обработки команд. */

 _tprintf(_T("\nУправление службами Windows Services"));

 while (!Exit) {

_tprintf(_T ("\nSM$"));

_fgetts(Command, MAX_COMMAND_LINE, stdin);

… Как для JobShell …

if (_tcscmp(argstr [0], _T("create")) == 0) {

Create(LocArgc, pArgs, Command);

}

… Аналогичным образом для всех команд …

 }

 CloseServiceHandle(hScm);

 return 0;

}

int Create(int argc, LPTSTR argv[], LPTSTR Command) {

 /* Создание новой службы в виде службы, запускаемой "по требованию":

argv[1]: имя службы

argv[2]: отображаемое имя службы

argv[3]: название исполняемого файла */

 SC_HANDLE hSc;

 TCHAR CurrentDir[MAX_PATH +1], Executable[MAX_PATH + 1];

 hSc = CreateService(hScm, argv[1], argv[2], SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, Executable, NULL, NULL, NULL, NULL, NULL);

 return 0;

}

/* Удаление службы – argv [1]: имя удаляемой службы. */

int Delete(int argc, LPTSTR argv[], LPTSTR Command) {

 SC_HANDLE hSc;

 hSc = OpenService(hScm, argv[1], DELETE);

 DeleteService(hSc); 

 CloseServiceHandle(hSc);

 return 0;

}

/* Запуск именованной службы - argv [1] : имя запускаемой службы. */

  • Читать дальше
  • 1
  • ...
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: