Слу?жбы Windows (англ. Windows Service, сервисы) — приложения, автоматически запускаемые системой при запуске Windows и выполняющиеся вне зависимости от статуса пользователя. Имеет общие черты с концепцией демонов в Unix.
Режимы работы
В большинстве случаев службам запрещено взаимодействие с консолью или рабочим столом пользователей (как локальных, так и удалённых), однако для некоторых сервисов возможно исключение — взаимодействие с консолью (сессией с номером 0, в которой зарегистрирован пользователь локально или при запуске службы mstsc с ключом /console).
Существует четыре режима для сервисов:
* запрещён к запуску;
* ручной запуск (по запросу);
* автоматический запуск при загрузке компьютера;
* обязательный сервис (автоматический запуск и невозможность (для пользователя) остановить сервис).
Фоновый режим
Windows предлагает программу Service Control Manager, с её помощью можно управлять созданием, удалением, запуском и остановкой служб. Приложение, имеющее статус сервиса, должно быть написано таким образом, чтобы оно могло принимать сообщения от Service Control Manager. Затем, одним или несколькими вызовами API, имя службы и другие атрибуты, такие, как его описание, регистрируются в Service Control Manager.
c# это просто — Windows Service за 5 минут
Запуск, остановка и изменение служб Windows
После установки службы, её атрибуты могут быть изменены путём запуска «Services» из Панели управления Windows в Administrative Tools.
Управление запуском служб при старте Windows
Список служб находится в ветке реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices. Значения параметра «Start» имеют тип «REG_DWORD» и могут принимать значения: «0», «1», «2», «3» и «4» (когда служба не запускается, то есть запуск даной службы запрещен).
Управление работой служб из командной строки
Управление службами возможно с помощью командной строки: остановка службы — «net stop service_name», запуск службы — «net start service_name».
Права пользователя и особенности реализации
Сервисы Windows по умолчанию запускаются от имени пользователя «LocalSystem», который обладает полными правами в системе (превосходящими права даже учётной записи Administrator). Рабочим каталогом будет системный каталог Windows (обычно C:WINNT или C:WINDOWS), а каталог для хранения временных файлов будет C:WINNTTEMP.
Поскольку это не настоящий пользователь, а «виртуальный», появляются некоторые трудности, когда приложению необходимо сохранить данные, относящиеся к пользователю (user-specific data), поскольку не существует папки этого пользователя.
Важно также то, что в случае если служба работает от имени локального пользователя (реальный пользователь созданный для служебных целей) если пароль такого пользователя изменён, сервис не будет запускаться до тех пор, пока пароль для сервиса тоже не будет изменен.
Эта статья находится под лицензией GNU Free Documentation License. Она использует материалы из Википедеи.
Что такое Windows Server и в чем отличие от Windows?
Источник: www.anvir.net
Будьте всегда
в Настроении
Начиная с версии Windows XP в операционных системах этого семейства появилась одна весьма неординарная служба — Svchost.exe (netsvcs). В первоначальном вар.
Svchost. exe netsvcs: как отключить?
+374 11 233 255
А ЧТО ВЫ ДУМАЕТЕ ОБ ЭТОМ?
«После Скабеевой размножаться не хочется вообще»: Харламов поставил на место Скабееву
Кyпили квapтиру в плачевном состоянии. Coбрали с мужем денег и сдeлали из нее конфетку
С какой целью фараоны возводили пирамиды и почему они перестали это делать
После ухода из жизни моего мужа его родители заявили, что я нагуляла ребенка и угрожали выселить нас на улицу
Стеклянная кожа — секрет кореянок, позволяющий выглядеть на 10 лет моложе
Если женщина говорит, что сыта по горло — она не передумает
Закон притяжения денег. Вы сами денежный магнит
Почему строгие родители гарантия успешности ребенка
Женщина без ног преобразилась и вышла замуж. Как выглядит избранник героини «Пусть говорят»
5 нюансов, которые старят женщину гораздо больше, чем морщинки
Список того, что «дешевит» женщин
Сильные слова мудрой матери, которые я запомню навсегда
ПОПУЛЯРНОЕ 27.12.2022
— Валера, дочка умерла…
Свечи «Тукофитомол»: инструкция по применению, показания, аналоги, отзывы
Источник: nastroy.info
Службы Windows
Службы Windows – специальные программы, запускаемые в фоновом режиме для обеспечения согласованной работы аппаратных и софтовых компонентов компьютера, либо для поддержки тех или иных системных функций. Все службы можно разделить на два класса: службы режима ядра (kernel-mode services), которые являют собой драйверы различных устройств и, собственно, сами системные службы. Последние работают в виде обычных процессов и могут быть настроены нами. В статье ниже речь как раз и пойдет о том, какие службы имеются в Windows, для чего они нужны и как мы сможем настраивать их на своем ПК.
Кому служат службы
Статья о службах Windows, их предназначении и настройке. Сегодняшнюю статью, пожалуй-ка, начну я с небольшой присказки :). Случилось это, когда я был еще только чуть продвинутее простого «чайника» (ну, там, Windows умел переустанавливать, да программы разные). Был у меня принтер (кстати, до сих пор еще верой и правдой служит!), которым пользовались только время от времени.
И вот как-то раз, после того, как он простоял без дела пару месяцев, случилась сиюминутная необходимость что-то распечатать. Отправил я документ на печать, а принтер-то и не работает. При этом все огоньки-индикаторы горят, в Диспетчере устройств мой Canon IP1500 отображается, но в Очереди печати – пустота. Вот так, товарищи, и произошло мое первое (и не совсем приятное) знакомство со Службами Windows. Оказалось, что всему виной были не драйверы, которые я кинулся переустанавливать, не поломка принтера, а просто отключение системной оснастки Диспетчер очереди печати!
Зачем нужны службы
- чипсет;
- видеокарта;
- звуковая карта;
- сетевая карта;
- модули беспроводной связи (WiFi, Bluetooth, NFC и т.п.).
Так вот, служба, выражаясь по-просту, является системной программой, которая позволяет Windows обращаться ко всем установленным драйверам, управляющим той или иной частью аппаратной «начинки» Вашего компьютера:
Например, если вернуться к описанной выше проблеме, служба Диспетчер очереди печати сама по себе не является драйвером принтера. Она служит своеобразным тумблером, который позволяет (или не позволяет) системе распечатывать что-либо, обращаясь к драйверу.
Особенности работы служб
Все активные службы запускаются автоматически вместе с Windows и иногда, наряду с программами, могут сильно тормозить загрузку системы. Но об этом немного позже. Сейчас нам важно знать, что службы работают одинаково для всех учетных записей на ПК и зачастую не требуют вмешательства пользователя.
Однако, случаются ситуации, когда та или иная служба дает сбой. Причин может быть несколько:
- Ошибочное или злонамеренное действие пользователя ПК (отключение службы, удаление ее файла или записи в реестре).
- Последствия деятельности компьютерных вирусов.
- Системный сбой (вызванный, например, механическим воздействием или перепадом напряжения).
Поскольку, мы уже знаем, что службы по своей сути являются своеобразными выключателями тех или иных функций, то во всех случаях решения может быть фактически только два. Неработающую службу нужно либо просто повторно запустить (что требуется чаще всего), либо переустановить (некоторые службы без переустановки самой системы переустановить, увы, нереально).
Думаю, с теорией на сегодня покончено, поэтому переходим к практике.
Просмотр и настройка служб
Посмотреть список всех установленных служб в новых версиях Windows (начиная с Vista) можно прямо в Диспетчере задач, который вызывается сочетанием клавиш CTRL+SHIFT+Esc:
Управлять службами в Диспетчере задач удобно, если требуется просто быстро проверить, активна ли определенная служба и запустить (либо отключить) ее. Для этих действий используется контекстное меню.
Кроме функций запуска/перезапуска/остановки и открытия оснастки служб, в Windows 8 в меню появилась приятная возможность – «Поиск в Интернете». Она позволяет быстро найти информацию по выбранной службе во Всемирной Сети.
Однако, далеко не все пользуются современными операционными системами. У многих еще стоит старая добрая Windows XP. И там Диспетчер задач довольно скудный. Получить доступ к службам во всех без исключения Windows можно альтернативным способом – через одноименную системную оснастку. Открывается она так: «Пуск» (или «Компьютер» в Windows 8) → Панель управления → Администрирование → Службы (либо при помощи команды «services.msc» (без кавычек) в строке «Выполнить»):
Перед нами откроется окно, содержащее список установленных на компьютере служб. В нижней части окна есть две вкладки, позволяющие переключаться между Стандартным и Расширенным видом списка. Советую сразу переключиться в «Расширенный» режим, чтобы видеть все свойства служб.
Каждая служба в списке имеет ряд характеристик:
- Имя (по этому имени можно найти данные о службе в Интернете).
- Описание (если описания нет или оно на английском, значит служба не является системной).
- Состояние (индикатор активности службы).
- Тип запуска (определяет вариант загрузки службы).
- Вход от имени (указывает на то, используется ли служба каким-то системным компонентом или другой службой).
В расширенном режиме слева от списка служб имеется поле, в котором выводится основная информация о выбранном сервисе и действия для его запуска/перезапуска или остановки. Эти же действия можно осуществить при помощи контекстного меню.
Если же по службе кликнуть дважды левой кнопкой мыши или выбрать в контекстном меню пункт «Свойства», то мы сможем добраться до настроек:
В разных версиях Windows количество вкладок со свойствами службы будет разное, но везде первой открывается вкладка «Общие». Она позволяет увидеть все основные параметры выбранного сервиса и здесь же настроить тип его запуска. Типов, в зависимости от установленной версии Windows, может быть 3 или 4:
- Автоматически (отложенный запуск). Данный тип запуска появился впервые в Windows Vista и позволяет автоматически запустить службу с низким приоритетом после полной загрузки ПК.
- Автоматически. Тип запуска активный по умолчанию для большинства системных служб. Запускает сервис автоматически с высоким приоритетом при загрузке Windows.
- Вручную. При выборе данного типа служба не загружается вместе с системой, но может быть активирована автоматически, если Вы запустите программу, требующую активности данного сервиса, либо включите службу вручную.
- Отключена. При таком типе запуска включить службу можно только вручную.
- «Вход в систему». Если Вы являетесь Администратором ПК, то здесь можете выбрать будет ли служба запускаться от имени системы или же будет работать только с определенной учетной записью (требуется ввод логина и пароля профиля пользователя, для которого запускается служба).
- «Восстановление». Здесь можно указать действия, которые должны выполняться при неудачном запуске службы (попытка перезапуска, сохранение отчета или запуск определенной программы).
- «Зависимости». Эта вкладка нужна для просмотра того, зависят ли от выбранной службы какие-либо компоненты системы.
Последняя вкладка может пригодиться в том случае, если Вы не уверены, нужна служба или от нее ничего не зависит и ее можно отключить.
Отключение служб
И вот мы добрались до самого главного 🙂 Как мы уже поняли, службы в Windows играют важную, но далеко не критическую, роль. Поэтому для ускорения загрузки ПК иной раз бывает целесообразно либо полностью отключить некоторые сервисы, либо активировать их отсроченный старт или запуск по требованию.
При этом важно понимать, что, отключив определенную службу, мы лишимся какой-то части функционала операционной системы. Поэтому, здесь действует принцип «не навреди». То есть, если не знаете, для чего нужна та или иная служба, лучше ее не трогайте. А еще лучше, поищите о ней сведения в Интернете, а потом решайте.
Увы, универсального рецепта настройки служб не существует. У каждого на компьютере, помимо десятков стандартных сервисов, имеется еще ряд сторонних, которые были установлены различными программами (например, антивирусом, каким-либо эмулятором и т.п.). Службы антивирусного ПО нельзя отключать, а вот, например, тип запуска службы эмулятора виртуального дисковода Daemon Tools или виртуальной машины BlueStack вполне себе можно сделать «Вручную».
Есть здесь и еще один «фокус». Для всех нестандартных служб (как мы помним, у них зачастую нет русского описания) можно установить тип запуска «Автоматически (отложенный запуск)». Так мы сохраним их работу (а то мало ли что :)) и немного облегчим загрузку системе. Единственный нюанс – на ноутбуках так нежелательно тормозить службы, которые взаимодействуют с драйверами чипсета.
Наконец, есть и ряд системных служб, которые при определенных условиях можно безболезненно отключить вовсе. Приведу их список ниже в виде таблички с именем службы и тем, что мы потеряем при ее отключении:
KtmRm для координатора распределенных транзакций | какая-то системная служба, которую даже сама Windows рекомендует отключать, если Вы не знаете зачем она нужна 🙂 |
Автономные файлы | поддержка автономных файлов, к которым запрещен доступ из сети (в принципе, пока мы не дадим доступ к определенной папке, все файлы и так автономны :)) |
Агент политики IPSec | защита протокола TCP/IP на сетевом уровне (в принципе, современные браузеры по умолчанию проверяют все пакеты ничуть не хуже и на программном уровне) |
Адаптивная регулировка яркости | работа сенсора освещенности (если его нет, то смело отрубаем) |
Брандмауэр Windows | работа встроенного брандмауера (можно отключать, если хотите установить сторонний файрволл или отключить его вообще :)) |
Браузер компьютеров | отображение других компьютеров в Сетевом окружении (если компьютер не подключен к локальной сети, можно отключать) |
Вспомогательная служба IP | поддержка протокола IPv6 (пока не особо нужна) |
Вторичный вход в систему | возможность запуска процессов от имени других пользователей (лучше отключить, хотя бы в целях безопасности) |
Диспетчер печати | поддержка принтеров (в т.ч. и виртуальных)(если нет принтера и не нужно ничего сохранять в PDF можно отключать) |
Доступ к HID-устройствам | поддержка USB-клавиатур и мышей (отключать можно только на ПК с устройствами ввода подключенными к портам PS/2) |
Защитник Windows | работа штатной системы защиты от вирусов (лучше отключить и заменить его нормальным полноценным антивирусом) |
Клиент отслеживания изменившихся связей | функция отслеживания и протоколирования перемещения файлов в пределах ПК или по сети (смело отключайте для экономии ресурсов) |
Модули ключей IPsec для обмена ключами в Интернете и протокола IP с проверкой подлинности | параноидальный способ защиты сетевого подключения 🙂 |
Обнаружение SSDP | собственно, работа с удаленными устройствами по протоколу SSDP (вряд ли Вы пользуетесь чем-то подобным :)) |
Поиск Windows | стандартный поиск при помощи кнопки F3 (можно отключить, если Вы редко что-то ищете) |
Политика удаления смарт-карт | блокировка компьютера при извлечении смарт-карты (сомневаюсь, что у кого-то есть такие :)) |
Служба ввода планшетного ПК | поддержка сенсорного экрана (если у Вас нет сенсорного экрана – отключайте) |
Служба инициатора Майкрософт iSCSI | поддержка устройств с интерфейсом iSCSI |
Служба поддержки Bluetooth | собственно, поддержка блютуза (если такового нет – выключаем) |
Служба регистрации ошибок Windows | отправка отчетов об ошибках «любимому» MicroSoft’у |
Удаленный реестр | доступ к реестру по локальной сети |
Факс | поддержка приема факса через встроенный модем (в современных компьютерах такого уже нет) |
Шифрованная файловая система (EFS) | штатная функция шифрования файлов (если шифроваться не от кого – выключаем :)) |
Фу-у-ух 🙂 В моем списке, вроде, все. Может, я что-то и пропустил, но о большей части второстепенных стандартных служб упомянул точно. Можете свериться с приведенным списком и безболезненно отключить большинство из упомянутых служб у себя.
Выводы
Настройка служб, как Вы могли убедиться, дело не такое уж и страшное, но и тут не помешает осторожность. Еще раз напомню, что, если Вы не уверены в том, нужна Вам определенная служба или нет, лучше поищите о ней информацию в Интернете, и только потом решайте, что с ней делать.
В любом случае, вот Вам еще одна подстраховка. Практически все настройки служб хранятся в реестре по адресу: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices. Чтобы обезопасить себя от возможных ошибок, перед началом правки параметров служб экспортируйте данную ветку (контекстное меню – Экспортировать) в reg-файл, чтобы иметь возможность быстро восстановить все, как было.
Успешных Вам настроек и быстрой загрузки компьютера!
P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения
После включения персонального компьютера и загрузки оперативной системы происходит запуск некоторых процессов. Эти процессы создаются запущенными приложениями и системными службами. Службы, или как их еще называют Services, это тоже программы на которые возложены определенные функциональные задачи.
Они автономно запускаются вместе с загрузкой Windows 10, после чего начинают работать, исправно выполнять возложенные функции. Их работа не видна глазу пользователя, но в некоторых случаях службы могут расходовать непозволительно большое количество ресурсов. В таком случае компьютерные специалисты рекомендуют отключать те Services, без которых возможна стабильная и бесперебойная работа ОС. В этой статье расскажем, какие службы можно отключать.
Для чего нужны службы
Правильная работа операционной системы невозможна без наличия драйверов. Если в Windows 10 не будет установлен какой-либо драйвер, например, любого периферийного устройства, система не сможет его распознать. То есть, чтобы исправно работал принтер, сканер, модуль управления беспроводной связи или любой другой компонент персонального компьютера в операционной системе должен быть установлен определенный пакет программ – драйверов. Если говорить простым языком, службы это системные приложения, позволяющие Windows 10 обращаться к драйверам, управляющим определенной аппаратной частью компьютера.
Можно сказать, что служба выступает промежуточным звеном в связке «Система – Служба – Драйвер». Для лучшего понимания приведем простой пример. В Windows 10 или в любой другой предыдущей версии ОС есть служба под названием «Диспетчер очереди печати».
Она не отвечает за работу внешнего устройства, а только позволяет или не позволяет системе выполнить печать после обращения к драйверу принтера. Подобный принцип взаимодействия Services и Drivers характерен для всей аппаратной части. Но есть системные приложения, которые можно смело отключать и освобождать дополнительные ресурсы. Иногда их отключают с той целью, чтобы снизить уровень уязвимости ПК. Ведь работа некоторых программ тесно связана с сетью: создаются открытые порты, чем могут воспользоваться злоумышленники.
Как открыть окно со службами в Windows 10
Открыть окно со службами можно разными способами. Один из самых простых:
- Нажмите на клавиатуре сочетание клавиш Windows + R.
- В открывшемся диалоговом окне введите команду «services.msc».
- Нажмите «Ок» или клавишу «Enter» на клавиатуре.
- На экране появится список всех доступных Services.
Также можно просто нажать правой кнопкой мыши по меню «Пуск», после чего выбрать «Управление компьютером».
В левом окошке открывшегося списка выбираем «Службы и приложения».
Система отобразит все задействованные и неактивные программы. Еще один способ открытия нужного нам списка: вызов «Диспетчер устройств» и переход во вкладку с соответствующим названием.
Последний способ особенно удобен, так как позволяет с минимальными временными затратами просмотреть задействованные и отключенные Services. Прямо здесь их можно включать и отключать. Для этого нажмите на названии правой кнопкой мыши. Полезная «фишка», которой предлагает воспользоваться ОС – поиск в интернете информации, касательно задач и функциональных обязанностей интересующей службы.
Можно ли отключать службы
В принципе, пользователь может отключать все, что ему захочется. Но делать это нужно осознанно. Все дело в том, что определенные Services взаимосвязаны между собой. Отключая одну службу, юзер нарушит работу другой, что приведет к сбою всей операционной системы.
Прежде чем предпринимать какие-то действия, нужно внимательно ознакомиться с программой и разобраться с возложенными на неё функциями. В Windows 10 уже есть справочник с описанием, но для начинающего пользователя ПК эта информация поможет показаться непонятной. В любой поисковой системе введите наименование службы, и вы сразу же получите ответ. Поэтому проблем с поиском исчерпывающей информации возникнуть не должно.
Так выглядит описание в системе:
Из скриншота видно, что есть некая служба RemoteRegistry, которая открывает доступ удаленным пользователям к параметрам реестра. По умолчанию она всегда запущена, но мы можем в любую минуту зайти в её свойства и в строке «Состояние» выбрать функцию «Остановить». Чтобы изменения вступили в силу, достаточно нажать кнопку «Ок».
Это одна из Services, отключение которой не повлияет на работу ПК. В домашних условиях совершенно нет надобности в RemoteRegistry, которая пригодится разве что систему администратору для правки веток реестра. Мы также подготовили список разрешенных к отключению служб. Вы можете смело их деактивировать и освободить пару сотен мегабайт оперативной памяти.
При первой же необходимости можно вернуть их к работе. Просто повторите весь описанный выше порядок действий. Только в свойствах отключенной службы с целью её запуска в строке «Состояние» жмите функцию «Запустить».
Универсального рецепта отключения всех ненужных Services нет. Задача юзера – шаг за шагом деактивировать сервисы, которые не критичны для работы операционной системы. Здесь главное не навредить. Если вы точно не можете понять, нужна программа или нет, в её свойствах выберите автоматический тип запуска. Работа этого приложения будет сохранена, но операционная система немного облегчится.
Отключаем Services с помощью PowerShell
В Windows 10 легко взаимодействовать с системой, изменять параметры и автоматизации задач посредством современной командной оболочки PowerShell. Открывается приложение через панель управления или с формы поиска.
Непосредственно в открытой командной строке введите функцию stop-service и наименование службы. Остановим работу приведенного выше сервиса, отвечающего за удаленный доступ пользователей к реестру. Просто вводим stop-service remoteregisty.
Теперь служба не будет работать. Чтобы вернуть её к работе, stop-service в строке команд следует заменить на start-service. Однако такой способ больше подходит опытным пользователям, уверенным в правильности своих действий. Начинающим юзерам рекомендуем пользоваться более наглядными и надежными методиками – в диспетчере или в управлении компьютером.
Заключение
Настраивать, отключать или включать службы достаточно просто. Только нужно быть уверенным в правильности совершаемых действий. Не будет лишним перед каждым обращением к Services страховаться. Зайдите в реестр и экспортируйте ветку HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices в reg-файл, чтобы в случае сбоя привычной работы Windows 10 вернуть прежние настройки.
В этой ветке хранятся все исходные параметры. После отключения некоторых сервисов освобождается оперативная память, разгружается система. Вполне оправданное занятие, которое даст определенный результат. Надеемся, что после прочтения данной статьи у вас появилось понимание, как отключаются и включаются службы в Windows 10.
Источник: www.2dsl.ru
Программа службы
Выбрав новый шаблон проекта C# Windows Services (Службы Windows на C#), можно приступить к созданию программы службы (Windows Service). Назначьте программе имя QuoteService.
После щелчка на кнопке ОК появится окно визуального конструктора. Однако вставлять какие-либо компоненты пользовательского интерфейса здесь нельзя, поскольку приложение такого типа не может ничего непосредственно отображать на экране. Это окно конструктора будет использоваться чуть позже для добавления других компонентов, таких как объекты установки, счетчики производительности и средства регистрации событий в журнале.
Выбор свойств новой программы Windows Service приведет к открытию окна редактора свойств, в котором для настройки доступны следующие свойства:
Autolog
Позволяет указывать, что события о запуске и останове службы должны автоматически записываться в журнал событий.
CanPauseAndContinue, CanShutdown и CanStop
Позволяют выполнять запросы на приостановку, возобновление, завершение и останов службы.
ServiceName
Позволяет указывать имя службы, которое должно заноситься в системный реестр и применяться для ее управления.
CanHandleSessionChangeEvent
Позволяет указывать, должна ли служба уметь обрабатывать события изменения, поступающие из сеанса терминального сервера.
CanHandlePowerEvent
Представляет собой очень полезное свойство для служб, запускаемых на портативных компьютерах или мобильных устройствах. Если оно включено, служба может реагировать на события, связанные с электропитанием, и менять свое поведение соответствующим образом. Примером таких событий являются снижение заряда батареи, изменение электропитания (из-за переключения в режим питания от сети) и переход в состояние ожидания.
По умолчанию службе назначается имя Service1, каким бы образом не назывался сам проект. Устанавливать можно только одну службу Service1. Если во время процесса тестирования получены ошибки установки, это может свидетельствовать о том, что одна служба Service1 уже установлена. В таком случае перед началом процесса развертывания в редакторе свойств имя службы должно быть изменено на более подходящее.
Изменение свойств в редакторе свойств приведет к установке соответствующих значений для унаследованного от ServiceBase класса в методе InitalizeComponent(). Этот метод уже знаком по приложениям WPF. В случае служб он применяется похожим образом.
Мастер самостоятельно сгенерирует код, но в нем нужно будет изменить имя файла на QuoteService.cs, имя пространства имен — на WinServices, а имя класса — на QuoteService. Этот код подробно рассматривается далее.
Класс ServiceBase
Класс ServiceBase является базовым для всех приложений типа Windows Service, которые разрабатываются с помощью .NET Framework. Наш класс QuoteService тоже унаследован от ServiceBase; этот класс взаимодействует с SCM за счет применения недокументированного вспомогательного класса System.ServiceProcess.NativeMethods, который служит оболочкой для вызовов API-интерфейса Win32. Этот класс является внутренним (internal), поэтому не может использоваться в разрабатываемом коде.
На рисунке приведена диаграмма последовательностей, которая иллюстрирует схему взаимодействия между SCM, классом QuoteService и классами из пространства имен System.ServiceProcess:
На этой диаграмме линии существования объектов идут в вертикальном направлении, а линии взаимодействия — в горизонтальном. Линии взаимодействия упорядочены по временному признаку сверху вниз.
Как видно на этой диаграмме, сначала SCM стартует процесс запускаемой службы. Во время запуска вызывается метод Main(), в котором происходит обращение к методу Run() базового класса ServiceBase.
Этот метод Run() регистрирует в SCM метод ServiceMainCallback() за счет применения NativeMethods.StartServiceCtrlDispatcher() и заносит соответствующую запись в журнал событий.
Далее SCM вызывает зарегистрированный метод ServiceMainCallback() в программе службы, который сам регистрирует в SCM обработчик с помощью NativeMethods.RegisterServiceCtrlHandler[Ex] () и устанавливает значение состояния службы. Затем вызывается метод OnStart(). В методе OnStart() необходимо реализовать код запуска.
В случае успешного выполнения OnStart() в журнал событий заносится запись «Service started successfully» («Служба запущена успешно»). Реализуется обработчик в методе ServiceCommandCallback(). SCM вызывает этот метод при поступлении от службы запросов на изменение ее состояния. Метод ServiceCommandCallback() перенаправляет эти запросы дальше методам OnPause(), OnContinue(),OnStop(), OnCustomCommand() и OnPowerEvent().
Главная функция
В этом разделе рассматривается автоматически генерируемая при выборе соответствующего шаблона приложения главная функция для процесса службы. Сначала в главной функции объявляется массив классов ServiceBase по имени ServicesToRun. После этого создается один экземпляр класса QuoteService и передается этому массиву ServicesToRun в первом элементе. Если необходимо, чтобы внутри процесса данной службы запускалось более одной службы, этому массиву необходимо передать несколько экземпляров классов желаемых служб. Далее массив передается статическому методу Run() класса ServiceBase.
С помощью метода Run() класса ServiceBase диспетчеру SCM можно передавать ссылки на точки входа в соответствующие службы. После этого основной поток процесса службы блокируется и ожидает завершения работы службы.
Ниже показано, как выглядит сгенерированный автоматически код:
static void Main() < ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] < new QuoteService() >; ServiceBase.Run(ServicesToRun); ServiceBase.Run(new QuoteService()); >
В случае запуска внутри процесса только одной службы массив может удаляться; метод Run() тогда принимает единственный унаследованный от ServiceBase объект и потому метод Main() может быть сокращен следующим образом:
ServiceBase.Run(new QuoteService());
Служебная программа Services.exe включает в себя множество служб. Если создается аналогичная служба, предусматривающая запуск более одной службы внутри одного и того же процесса и требующая инициализации для всех служб разделяемого состояния, такая инициализация должна производиться перед методом Run(). В методе Run() главный поток блокируется до тех пор, пока процесс службы не будет остановлен, и потому никакие следующие за ним инструкции не будут достигнуты до самого завершения работы службы.
Процесс инициализация не должен занимать более 30 секунд. Если код инициализации выполняется дольше 30 секунд, диспетчер SCM предполагает, что запуск службы не удался. Нужно заботиться о том, чтобы запуск службы мог происходить за 30-секундный интервал даже на самых медленных машинах. Если инициализация все-таки длится дольше, можно сделать так, чтобы она запускалась в отдельном потоке, позволяя методу Run() вызываться в главном потоке вовремя, и тогда использовать объект события для уведомления о завершении работы этим потоком.
Запуск службы
При запуске службы вызывается метод OnStart(). В этом методе может запускаться созданный ранее сервер сокетов. Все, что для этого требуется — это сослаться в нем на сборку QuoteServer для использования QuoteService. Поток, вызывающий метод OnStart(), не может блокироваться; этот метод должен возвращать управление тому методу, который его вызывает, каковым в данном случае является ServiceMainCallback() класса ServiceBase. После вызова метода OnStart() класс ServiceBase регистрирует обработчик и информирует SCM о том, что служба была успешно запущена:
protected override void OnStart(string[] args)
Далее quoteServer объявляется приватным членом класса:
public partial class QuoteService : ServiceBase < private QuoteServer quoteServer; .
Методы-обработчики
При останове службы вызывается метод OnStop(). В этом методе предоставление функциональности сервера должно прекращаться:
protected override void OnStop()
Помимо методов OnStart() и OnStop() в классе службы можно переопределить еще и следующие методы-обработчики:
- OnPause(). Этот метод вызывается тогда, когда работу службы требуется временно приостановить.
- OnContinue(). Этот метод вызывается тогда, когда работу службы требуется возобновить после того, как она была временно приостановлена.
- OnShutdown(). Этот метод вызывается тогда, когда происходит завершение работы Windows. Обычно поведение этого метода должно напоминать реализацию метода OnStop(); если для завершения работы требуется больше времени, в нем может запрашиваться дополнительное время. Как и в случае методов OnPause() и OnContinue(), для обеспечения такого поведения в OnShutDown понадобится установить соответствующее значение для соответствующего свойства, а именно — true для свойства CanShutdown.
- OnPowerEvent(). Этот метод вызывается тогда, когда в системе изменяется режим электропитания. Информация об изменениях в режиме электропитания содержится в аргументе типа PowerBroadcastStatus, который представляет собой перечисление с такими значениями, как BatteryLow и PowerStatusChange. Здесь также будет предоставляться информация о намерении системы временно отложить запрос (QuerySuspend) и возможность разрешать или запрещать ей это делать.
- OnCustomCommand(). Этот метод представляет собой обработчик, который может обслуживать специальные команды, отправляемые программой управления службы. В сигнатуре метода OnCustomCommand() присутствует аргумент int, отражающий номер специальной команды. Это значение может варьироваться от 128 до 256; значения ниже 128 зарезервированы системой. В нашей службе этот метод может применяться для обслуживания специальной команды под номером 128, предусматривающей выполнение считывания файла цитат заново:
protected override void OnContinue() < base.OnContinue(); >protected override void OnPause() < base.OnPause(); >public const int commandRefresh = 128; protected override void OnCustomCommand(int command) < switch (command) < case commandRefresh: quoteServer.RefreshQuotes(); break; default: break; >>
Источник: professorweb.ru