Читаем Системное программирование в среде Windows полностью

 /* Запустить специфическую для службы обработку; выполнение типового участка кода завершено. */

 if (ServiceSpecific(argc, argv) != 0) {

  hServStatus.dwCurrentState = SERVICE_STOPPED;

  hServStatus.dwServiceSpecificExitCode = 1;

  /* Ошибка при инициализации сервера. */

  SetServiceStatus(hSStat, &hServStatus);

  return;

 }

 /* Возврат сюда будет осуществлен лишь после завершения функции ServiceSpecific, указывающего на прекращение работы системы. */

 UpdateStatus(SERVICE_STOPPED, 0);

 return;

}

void UpdateStatus(int NewStatus, int Check)

/* Определить новое состояние и контрольную точку — задается либо истинное значение, либо приращение. */

{

 if (Check < 0) hServStatus.dwCheckPoint++;

 else hServStatus.dwCheckPoint = Check;

 if (NewStatus >= 0) hServStatus.dwCurrentState = NewStatus;

 SetServiceStatus(hSStat, &hServStatus);

 return;

}

/* Функция обработчика, активизируемая SCM для выполнения в том же */

/* потоке, что и основная программа. */

/* Последние три параметра не используются, так что обработчики, написанные*/

/* для версий Windows младше NT5, в этом примере также будут работать. */

VOID WINAPI ServerCtrlHandlerEx(DWORD Control, DWORD EventType, LPVOID lpEventData, LPVOID lpContext) {

 switch (Control) {

 case SERVICE_CONTROL_SHUTDOWN:

 case SERVICE_CONTROL_STOP:

  ShutDown = TRUE; /* Установить глобальный флаг завершения. */

  UpdateStatus(SERVICE_STOP_PENDING, –1);

  break;

 case SERVICE_CONTROL_PAUSE:

  PauseFlag = TRUE; /* Периодический опрос. */

  break;

 case SERVICE_CONTROL_CONTINUE:

  PauseFlag = FALSE;

  break;

 case SERVICE_CONTROL_INTERROGATE:

  break;

 default:

  if (Control > 127 && Control < 256) /*Пользовательские сигналы.*/ 

   break;

 }

 UpdateStatus(-1, –1); /* Инкрементировать контрольную точку. */

 return;

}

/* Эта специфическая для службы функция играет роль функции "main" и вызывается из более общей функции ServiceMain. Вообще говоря, вы можете взять любой сервер, например ServerNP.c, и поместить его код прямо сюда, переименовав функцию "main" в "ServiceSpecific". Однако для кода обновления состояния потребуются некоторые изменения. */

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

 UpdateStatus(-1, –1); /* Инкрементировать контрольную точку. */

 /* … Инициализация системы … */

 /* Обеспечьте периодическое обновление контрольной точки. */

 return 0;

} 

<p>Управление службами Windows</p>

Следующее, что потребуется сделать после написания кода службы — поместить ее под управление SCM, что позволит запускать и останавливать службу, а также осуществлять любые иные формы управления, какие только могут понадобиться.

Для этого необходимо выполнить несколько шагов, включая открытие SCM, создание службы под управлением SCM и последующий ее запуск. При этом вы воздействуете не непосредственно на службу, а на SCM, который, в свою очередь, и осуществляет управление заданной службой.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных