Отличие службы от приложения. Какие службы в Windows нужны, а какие можно отключить. Список служб операционных систем Microsoft Windows

Здравствуйте дорогие читатели, сегодня я хотел бы поговорить:

1. О службах Windows , что это, для чего нужны и какие за что отвечают.

2. И как же повысить быстродействия компьютера?

И так что это за службы Windows?

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

Открыть список служб можно несколькими способами:

1. Удерживая кнопку windows нажимаем R, откроется окно , там введите services.msc

2. Пуск > Панель управления > Администрирование > Службы

3. Пуск > правой кнопкой мыши по моему компьютеру > Управление > Службы и приложения > Службы

Как видите в Windows их достаточно много и скачав , Вы можете ознакомиться какие службы существуют и за что каждая из них отвечает .

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

Какие службы можно отключить в Windows 7, 8

Я не стал составлять список тех служб которые можно отключить, т.к. многие службы индивидуальны. Я просто постарался описать каждую службу и в каких ситуациях их можно отключить. Если вам нужно что-нибудь отключить бездумно, то просто воспользуйтесь .

* BranchCache — Служба кэширует сетевое содержимое. Если не пользуетесь домашней сетью, то вообще можете отключить.

* DHCP-клиент — Если пользуетесь интернетом не трогайте ни в коем случае. Именно эта служба присваивает вам ip адрес.

* DNS-клиент Так же необходимая служба для использования интернета. Работает с вашими DNS (служит для правильных направлений).

* KtmRm для координатора распределенных транзакций — системная функция транзакций. Её так же оставляем.

* Microsoft .NET Framework — Все такие службы оставляем как есть. Они служат для нормальной работы большинства приложений.

* Parental Controls — Служба для родительского контроля. Если не используете, можно отключить.

* Plug-and-Play — служит для автоматического распознавания изменений в системе. Например когда вы подключаете флешку, просыпается эта служба… Так что оставляем как есть.

* Quality Windows Audio Video Experience — передача аудио и видео по сети в режиме реального времени. Не нужна только если нет сети (или интернета) в остальных случаях оставляем.

* Remote Desktop Configuration — Для удаленного рабочего стола. Если не пользуетесь удаленными подключениями, отключаем.

* Superfetch — Полезная функция, работает с кэшем. Ускоряет работу Windows, так что оставляем.

* Windows Audio — Управляет звуком. Если не нужен звук отключаем. В остальных случаях оставляем.

* Windows CardSpace — ненужная и небезопасная служба. По этому отключаем.

* Windows Driver Foundation — User-mode Driver Framework — для нормальной работы драйверов, не трогайте. Пусть остается как есть.

* Windows Search — Индексирование файлов для поиска. Если не пользуетесь и есть время подождать пока найдется файл, то отключаем. На ssd обязательно отключаем!

* WMI Performance Adapter — нужна для служб требующие wmi, ставим вручную. Если каким-то приложениям понадобятся, те сами запустят)

* Автонастройка WWAN — служба для использования мобильного интернета. Если пользуетесь usb модемом, сим картой в ноуте, то не отключайте.

* Автономные файлы — помогает работать, автономно с недоступными файлами, которые загрузились до этого. Ставим вручную.

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

* А гент политики IPsec — Нужна при наличии сети и интернета.

* Адаптивная регулировка яркости — Оставляем если есть датчик освещения.

* Архивация Windows — Если не пользуетесь отключайте. Но лучше почитайте про архивацию в windows мало ли, будете пользоваться.

* Биометрическая служба Windows — нужна лишь при использовании биометрических устройств. В остальных случаях отключаем.

* Брандмауэр Windows — Я если честно всегда отключаю, т.к. воровать у меня нечего) А если и зашифруют данные, то восстановлю) Но вам посоветую обзавестись например касперским интернет секьюрити, которого есть и антивирус и брандмауэр. А этот отключите нафиг, т.к. он иногда блокирует что не нужно) Вообщем он следит за безопасностью вашего компьютера и закрывает порты, чтобы ворюги не смогли залезть к вам в компьютер)

* Браузер компьютера Вдомашней сети не нужна. Вручную.

* Веб-клиент — Нудна если нет интернета. Служит для работы с файлами в интернете. Оставляем.

* Виртуальный диск — Служба для работы с запоминающими устройствами. Ставим вручную.

* Вспомогательная служба IP — Работает с протоколом версии 6. Я всегда отключаю его самого, так что и службу можно вообще отключить.

* Вторичный вход в систему — Ставьте вручную, т.к. некоторые игры или программы включат её по необходимости.

* Группировка сетевых участников — Нужна для домашней группы. Ставьте вручную, мало ли понадобится…

* Дефрагментация диска — В принципе она не мешает. Можете оставить или отключить. Если отключите, то рекомендую делать раз в месяц. А для ssd дисков, вообще отключаем!

* Диспетчер автоматических подключений удаленного доступа — Ставим вручную. Нужна для удаленных подключений.

* Диспетчер печати — Нужна если есть с чего печатать. В остальных случаях отключаем.

* Диспетчер подключений удаленного доступа — вручную. Один раз вообще отключил и не смог создать подключение. Так что лучше вручную.

* Диспетчер сеансов диспетчера окон рабочего стола — Если не используете прозрачность от Aero, то можно отключить, даст большой прирост.

* Диспетчер удостоверения сетевых участников — Ставим лучше вручную.

* Диспетчер учетных данных — Лучше вручную. Хранит ваши данные, например логины и пароли.

* Диспетчер учетных записей безопасности — Лучше оставить как есть. Если отключить данную службу, то все изменения в локально политике безопасности пропадут.

* Доступ к HID-устройствам — Доступ к быстрым клавишам. Отключите, если какие-то комбинации перестанут работать, то поставьте обратно.

* Журнал событий Windows — записывает все события. Полезный инструмент для опытного пользователя. Отключить невозможно.

* Журналы и оповещения производительности — системная служба, оставляем как есть.

* Защита программного обеспечения — так же системная служба, оставляем как есть.

* Защитник Windows — Защита от шпионских и вредных программ. Установите нормальный антивирус, а эту службу отключите.

* Изоляция ключей CNG — Вручную.

* Инструментарий управления Windows — Системная служба, без неё, некоторые приложения могут работать некорректно, так что лучше оставить.

* Информация о совместимости приложений — Полезная штука, помогает запустится приложениям, которые отказываются работать на вашей ос. Ставим вручную.

* Клиент групповой политики — Оставляем. Отвечает за настройками политики безопасности.

* Клиент отслеживания изменившихся связей — Отслеживание файлов ntfs, не нужно. Отключаем.

* Координатор распределенных транзакций — Ставим вручную.

* Кэш шрифтов Windows Presentation Foundation — Ставим вручную. При необходимости её запустят приложения.

* Ловушка SNMP — Некоторые программы будут собирать о вас информацию. Так что отключайте.

* Локатор удаленного вызова процедур (RPC) — Вручную, при необходимости приложения её запустят.

* Маршрутизация и удаленный доступ — Не нужна. Отключаем.

* Модули ключей IPsec для обмена ключами в Интернете и протокола IP с проверкой подлинности — Не нужна, но лучше вручную.

* Модуль запуска процессов DCOM-сервера — Системная служба, оставляем как есть.

* Модуль поддержки NetBIOS через TCP/IP — Если нет других компьютеров в сети, то вручную.

* Немедленные подключения Windows — регистратор настройки — Вручную.

* Обнаружение SSDP — Оставьте как есть. Необходима для новых устройств.

* Обнаружение интерактивных служб — Вручную.

* Общий доступ к подключению к Интернету (ICS) — Не нужна, если вы не расшариваете ваш интернет в сетевых подключениях.

* Определение оборудования оболочки — необходима для диалогового окна автозапуска диска или флешки. Кому как удобно, большинству это нужно. Я оставил.

* Основные службы доверенного платформенного модуля — Нужно только для использования чипов ТМР и/или BitLocker.

* Перенаправитель портов пользовательского режима служб удаленных рабочих столов — Если не используете удаленные соединения, то не нужно. Лучше поставьте вручную.

* П еречислитель IP-шин PnP-X — Лучше поставить вручную.

* Питание — Не отключается. Оставляем.

* Планировщик заданий — Желательно оставить как есть, т.к. сейчас много программ его использует.

* Планировщик классов мультимедиа — Оставляем, для кого важен звук.

* Поддержка элемента панели управления «Отчеты о проблемах и их решениях» — Вручную.

* Политика удаления смарт-карт — для пользователей смарт-карт, лучше вручную.

* Поставщик домашней группы — Для использования домашних групп. Лучше вручную.

* Проводная автонастройка — Вручную.

* Программный поставщик теневого копирования (Microsoft) — Вручную.

* Прослушиватель домашней группы — Вручную.

* Протокол PNRP — Тоже оставляем вручную. Некоторые приложения могут использовать службу.

* Публикация ресурсов обнаружения функции — Нужна если вы хотите показывать свои файлы другим компьютерам по сети. Если не хотите, то вручную или отключить.

* Рабочая станция — лучше оставить, т.к. некоторые приложения задействуют данную службу.

* Распространение сертификата — Лучше вручную.

* Расширяемый протокол проверки подлинности (EAP) — Вручную.

* Сборщик событий Windows — Вручную.

* Сведения о приложении — Вручную.

* Сервер — Если компьютер не используется как сервер или не использует общий доступ к файлам и принтерам, то отключайте.

* Сервер упорядочения потоков — Отключаем если нет домашней группы.

* Сетевой вход в систему — Вручную.

* Сетевые подключения — Оставьте как есть. Если нет сети или интернета, то можете отключить.

* Система событий COM+ — ставим вручную. Приложения зависящие от это службы сами её запустят при необходимости.

* Системное приложение COM+ — Так же вручную.

* Служба SSTP — Оставляем как есть, нужна служба если есть интернет на компьютере.

* Служба автоматического обнаружения веб-прокси WinHTTP — Если нужен интернет, то оставьте как есть.

* Служба автонастройки WLAN — служба для беспроводных сетей. Соответственно если их нет, она не нужна.

* Служба базовой фильтрации — с одной стороны, она не нужна (если не нужна безопасность), но с другой, некоторые программы, могут выдавать ошибки. Так что оставляем.

* Служба ввода планшетного ПК — если экран не сенсорный, то не нужна.

* Служба времени Windows — нужна для синхронизации времени с интернетом.

* Служба загрузки изображений Windows (WIA) — Нужна служба, только если есть сканер. Она отвечает за получение изображений со сканеров и камер.

* Служба инициатора Майкрософт iSCSI — Ставим вручную, если программам понадобится, они сами её запустят.

* Служба интерфейса сохранения сети — Нужна для нормальной работы сети.

* Служба кэша шрифтов Windows — служит для повышения производительности, кэширует шрифты и не тратит время на загрузку.

* С лужба медиаприставки Media Center — Если не используете никаких приставок, она не нужна.

* Служба модуля архивации на уровне блоков — Ставим вручную. Если понадобится архивация или восстановление, то служба сама запуститься.

* Служба общего доступа к портам Net.Tcp — По умолчанию выключена. Нужна если только понадобится протокол Net.Tcp.

* Служба общих сетевых ресурсов проигрывателя Windows Media — Вручную. Понадобится, включится.

* Служба перечислителя переносных устройств — Служит для синхронизации музыки, видео и т.д. со съемными носителями. Я бы поставил вручную. Не всегда это нужно.

* Служба планировщика Windows Media Center — Нужна если только смотрите передачи в Windows Media Player.

* Служба поддержки Bluetooth — Нужна если есть Bluetooth.

* Служба политики диагностики — Нужна для диагностики неполадок… Она если честно помогает редко. По этому можете по-экспериментировать, отключив её. Если понадобится — включите.

* Служба помощника по совместимости программ — служба нужна для запуска программ, несовместимый с вашей ОС. Если нет таковых поставьте вручную.

* Служба профилей пользователей — Лучше оставить. Она работает с профилями пользователей компьютера.

* Служба публикации имен компьютеров PNRP — Нужна для домашних групп.

* Служба регистрации ошибок Windows — Регистрирует ошибки. Лучше поставить вручную.

* Служба ресивера Windows Media Center — для просмотра телерадио передач в плеере.

* Служба сведений о подключенных сетях — Лучше оставить как есть, для нормальной работы сети.

* Служба списка сетей — Так же лучше оставить.

* Служба уведомления SPP — Для лицензирования. Оставьте вручную.

* Служба уведомления о системных событиях — Если не собираетесь смотреть сообщения Windows, то она вам не нужна.

* Служба удаленного управления Windows (WS-Management) — Поставьте вручную.

* Служба шифрования дисков BitLocker — Шифрует диски. Если не пользуетесь, то лучше отключите.

* Служба шлюза уровня приложения — Служба нужна только для работы с брандмауэром. Вручную.

* Службы криптографии — Для установки новых программ, лучше оставьте как есть.

* Службы удаленных рабочих столов — Если не пользуетесь удаленными рабочими столами, то отключайте.

* Смарт-карта — Если ими не пользуетесь, то она вам не нужна.

* Сопоставитель конечных точек RPC — Служба нужна для входящего трафика. С ней ничего нельзя сделать. По этому оставляем.

* Средство построения конечных точек Windows Audio — Если нужен звук, оставьте.

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

* Темы — Едят много ресурсов памяти. Если не нужны, отключайте.

* Теневое копирование тома — Создает точки восстановления, архивация в фоновом режиме. Поставьте вручную. Если нужно будет запустится.

* Тополог канального уровня — Тоже вручную. Если понадобится, запустится.

* Удаленный вызов процедур (RPC) — Системная служба. Оставьте как есть.

* Удаленный реестр — Позволяет удаленным пользователям, манипулировать вашим реестром. Отключайте.

* Удостоверение приложения — Вручную.

* Узел системы диагностики — Диагностика проблем. Поставьте вручную.

* Узел службы диагностики — Так же вручную.

* Узел универсальных PNP-устройств — Ставьте вручную. Не все устройства PnP.

* Управление приложениями — Ставьте вручную. Служба позволяет настроить политики для приложений.

* Управление сертификатами и ключом работоспособности — Ставьте вручную, понадобится, запустится сама.

* Установщик ActiveX — Так же вручную. Понадобится установить такой объект, она сама запустится.

* Установщик Windows — Установка программ.msi. Вручную.

* Установщик модулей Windows — Устанавливает и удаляет компоненты и обновления. Вручную.

* Факс — Нужна если только есть факс.

* Фоновая интеллектуальная служба передачи (BITS) — Оставляем вручную. Служба полезная.

* Хост поставщика функции обнаружения — Оставляем вручную. Нужно будет запустится.

* Цветовая система Windows (WCS) — Вручную. Нужна будет устройствам, запустят.

* Центр обеспечения безопасности — Следит за безопасностью Windows. Меня она бесит со своими уведомлениями. Так что отключать или нет, выбирать вам.

* Центр обновления Windows — С одной стороны полезная функция. Заделывает дыры в системе, обновляет драйвера, но с другой стороны, активно использует интернет, ресурсы памяти и если при обновлении выключить компьютер, может рухнуть ОС. Так что так же вам выбирать что важнее, безопасность или быстродействие.

* Шифрованная файловая система (EFS) — Для безопасности файлов. Лучше оставьте как есть вручную.

Я постарался представить весь список служб. Отключив некоторые, вы повысите быстродействие компьютера. Можно так же по своему усмотрению решить какие нужны, а какие нет. Например если нет интернета, то тут половину смело рубить можно, если нет принтера, то тоже можно много выключить. Таким образом в зависимости от ваших потребностей, можно существенно взбодрить старый компьютер.

Можно ли запустить клиентское приложение в качестве службы? Не каждое консольное приложение сможет запуститься как служба, а программы с графическим интерфейсом в принципе не умеют работать подобным образом. Но возможность запустить приложение как службу все же есть, и поможет нам в этом программа с оригинальным названием Non-Sucking Service Manager .

NSSM представляет из себя свободное программное обеспечение с открытым кодом и поддерживает все операционные системы Microsoft , начиная с Windows 2000 и заканчивая . NSSM не требует установки, достаточно его загрузить и распаковать. В дистрибутив входят версии для 32- и 64-разрядных ОС. Взять программу можно с сайта nssm.cc, на данный момент последняя стабильная версия 2.21.1, которую я и буду использовать.

Для демонстрации возможностей NSSM попробуем запустить Блокнот в качестве службы на .

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

Для создания службы с именем notepad запускаем командную консоль, переходим в папку с распакованным NSSM (для 64-разрядной Windows) и вводим команду nssm install notepad, которая открывает окно графического инсталлятора NSSM. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку "Install service". Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке "Shutdown" перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:

На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.

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

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке "Exit actions" можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

На вкладке "Input/Output (I/O)" можно задать перенаправление ввода\вывода приложения в указанный файл.

На вкладке "Environment" можно задать для службы новые переменные окружения, или переопределить существующие.

Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:

nssm install notepad ″C:\Windows\system32\notepad.exe″

Управление службой

После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.

А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.

Удаление службы

Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду nssm remove notepad confirm, можно обойтись и без подтверждения.

Запуск службы в интерактивном режиме

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

Для того, чтобы запустить службу в интерактивном режиме, надо в оснастке Службы открыть ее свойства и на вкладке "Вход в систему" отметить чекбокс "Разрешить взаимодействие с рабочим столом".

А дальше начинаются чудеса Для службы, запущенной в интерактивном режиме, система открывает отдельный изолированный сеанс (session 0). Попасть в этот сеанс можно только при помощи Службы обнаружения интерактивных служб (ui0detect), которая отслеживает запуск интерактивных служб на компьютере и выдает оповещение. В Windows 7\Server 2008 эта служба активна по умолчанию, а в Windows 8\Server 2012 она отключена и не отображается в графической оснастке Службы (по крайней мере я ее там не нашел). Более того, если вы все же найдете эту таинственную службу и попробуете ее запустить, то получите сообщение об ошибке.

А дело в том, что для ее запуска необходимо разрешить запуск интерактивных служб на компьютере. Поэтому открываем редактор реестра, находим в разделе HKLM\System\CurrentControlSet\Control\Windows параметр типа DWORD с именем NoInteractiveServices и ставим его значение в 0 .

После чего открываем консоль PowerShell и стартуем службу обнаружения командой:

Start-Service -Name ui0detect

Убедившись что служба обнаружения запущена, рестартуем службу notepad, и получаем вот такое окошко. Выбираем пункт "Посмотреть сообщение"

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

Такое вот интересное решение для запуска приложений в виде служб Windows. Не самое красивое, но вполне соответствующее своему названию

Последнее обновление: 31.10.2015

Одним из важнейших компонентов ОС Windows являются службы. Фактически это отдельные приложения, которые не имеют графического интерфейса и которые выполняют различные задачи в фоновом режиме. Службы могут быть запущены при старте операционной системы, так и в любой другой момент работы пользователя. Распространенным примером служб являются различные веб-серверы, которые в фоновом режиме прослушивают определенный порт на наличие подключений, и если подключения имеются, то взаимодействуют с ними. Это могут быть также различные вспомогательные сервисы обновлений для других установленных программ, которые обращаются к серверу, чтобы узнать, есть ли новая версия приложения. В общем то мы можем открыть панель служб и сами увидеть все установленные и запущенные службы:

Рассмотрим, как создавать свои службы в C#. В качестве реализуемой задачи выберем наблюдение за изменениями в определенной папке в файловой системе. Теперь создадим для ее выполнения службу.

Вначале создадим новый проект, который будет иметь тип Windows Service . Назовем проект FileWatcherService:

После этого Visual Studio генерирует проект, который имеет все необходимое. Хотя в принципе нам необязательно выбирать именно этот тип проекта, можно было бы создать проект библиотеки классов, и затем в нем определить все необходимые классы.

Итак, новый проект выглядит следующим образом:

Здесь также есть файл Program.cs и есть собственно узел службы Service1.cs .

Служба представляет обычное приложение, но она не запускаетс сама по себе. Все вызовы и обращения к ней проходят через менеджер управления службами (Service Control Manager или SCM). Когда служба запускается автоматически при старте системы или вручную, то SCM обращается к методу Main в классе Program:

Static class Program { static void Main() { ServiceBase ServicesToRun; ServicesToRun = new ServiceBase { new Service1() }; ServiceBase.Run(ServicesToRun); } }

Метод Main по умолчанию определен таким образом, чтобы запускать сразу несколько служб, которые определены в массиве ServicesToRun. Однако по умолчанию проект содержит только одну службу Service1. Сам запуск производится с помощью метода Run: ServiceBase.Run(ServicesToRun) .

Сама запускаемая служба представлена узлом Service1.cs. Однако на самом деле это не простой файл кода. Если мы откроем этот узел, то увидим в нем файл дизайнера службы Service1.Designer.cs и класс Service1.

Класс Service1 собственно представляет службу. По умолчанию он имеет следующий код:

Using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; namespace FileWatcherService { public partial class Service1: ServiceBase { public Service1() { InitializeComponent(); } protected override void OnStart(string args) { } protected override void OnStop() { } } }

Класс службы должен наследоваться от базового класса ServiceBase . Этот класс определяет ряд методов, важнейшие из которых метод OnStart() , который запускает действия, выпоняемые службой, и метод OnStop() , останавливающий службу.

После того, как SCM вызовет метод Main и зарегистрирует службу, происходит непосредственный ее вызов через запуск метода OnStart.

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

Кроме этих двух методов в классе службы можно переопределить еще несколько методов базового класса ServiceBase:

    OnPause : вызывается при приостановке службы

    OnContinue : вызывается при возобновлении работы службы после ее приостановки

    OnShutdown : вызывается при завершении работы Windows

    OnPowerEvent : вызывается при изменении режима электропитания

    OnCustomCommand : вызывается при получении службой пользовательской команды от Менеджера Управления Службами (Service Control Manager / SCM)

В конструкторе класса Service1 вызывается метод InitializeComponent() , который определен в файле дизайнера Service1.Designer.cs:

Namespace FileWatcherService { partial class Service1 { private System.ComponentModel.IContainer components = null; protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } private void InitializeComponent() { components = new System.ComponentModel.Container(); this.ServiceName = "Service1"; } } }

Единственное, что надо в нем отметить, это установка названия службы (свойство ServiceName):

This.ServiceName = "Service1";

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

Теперь изменим код службы следующим образом:

Using System; using System.ServiceProcess; using System.IO; using System.Threading; namespace FileWatcherService { public partial class Service1: ServiceBase { Logger logger; public Service1() { InitializeComponent(); this.CanStop = true; this.CanPauseAndContinue = true; this.AutoLog = true; } protected override void OnStart(string args) { logger = new Logger(); Thread loggerThread = new Thread(new ThreadStart(logger.Start)); loggerThread.Start(); } protected override void OnStop() { logger.Stop(); Thread.Sleep(1000); } } class Logger { FileSystemWatcher watcher; object obj = new object(); bool enabled = true; public Logger() { watcher = new FileSystemWatcher("D:\\Temp"); watcher.Deleted += Watcher_Deleted; watcher.Created += Watcher_Created; watcher.Changed += Watcher_Changed; watcher.Renamed += Watcher_Renamed; } public void Start() { watcher.EnableRaisingEvents = true; while(enabled) { Thread.Sleep(1000); } } public void Stop() { watcher.EnableRaisingEvents = false; enabled = false; } // переименование файлов private void Watcher_Renamed(object sender, RenamedEventArgs e) { string fileEvent = "переименован в " + e.FullPath; string filePath = e.OldFullPath; RecordEntry(fileEvent, filePath); } // изменение файлов private void Watcher_Changed(object sender, FileSystemEventArgs e) { string fileEvent = "изменен"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); } // создание файлов private void Watcher_Created(object sender, FileSystemEventArgs e) { string fileEvent = "создан"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); } // удаление файлов private void Watcher_Deleted(object sender, FileSystemEventArgs e) { string fileEvent = "удален"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); } private void RecordEntry(string fileEvent, string filePath) { lock (obj) { using (StreamWriter writer = new StreamWriter("D:\\templog.txt", true)) { writer.WriteLine(String.Format("{0} файл {1} был {2}", DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"), filePath, fileEvent)); writer.Flush(); } } } } }

Ключевым классом, который инкапсулирует всю функциональность, является класс Logger. С помощью объекта FileSystemWatcher он будет вести мониторинг изменений в папке D://Temp . В методе Start() устанавливается, что мы будем отслеживать изменения через объект FileSystemWatcher. И вся работа будет идти, пока булевая переменная enabled равна true . А метод Stop() позволит завершить работу класса.

События FileSystemWatcher позволяют отслеживать все изменения в наблюдаемой папке. При этом будет вестись запись изменений в файл templog.txt. Чтобы не было гонки ресурсов за файл templog.txt, в который вносятся записи об изменениях, процедура записи блокируется заглушкой lock(obj) .

В итоге после создания, изменения, переименования и удаления файл лога будет содержать что-то наподобие:

30.07.2015 12:15:40 файл D:\Temp\Новый текстовый документ.txt был создан 30.07.2015 12:15:46 файл D:\Temp\Новый текстовый документ.txt был переименован в D:\Temp\hello.txt 30.07.2015 12:15:55 файл D:\Temp\hello.txt был изменен 30.07.2015 12:15:55 файл D:\Temp\hello.txt был изменен 30.07.2015 12:16:01 файл D:\Temp\hello.txt был удален

В самом классе службы Service1 в конструкторе устанавливается ряд опций:

This.CanStop = true; // службу можно остановить this.CanPauseAndContinue = true; // службу можно приостановить и затем продолжить this.AutoLog = true; // служба может вести запись в лог

В методе OnStart() для запуска объекта Logger вызывется новый поток:

Protected override void OnStart(string args) { logger = new Logger(); Thread loggerThread = new Thread(new ThreadStart(logger.Start)); loggerThread.Start(); }

Новый поток нужен, так как текущий поток обрабатывает только команды SCM и должен возвращаться из метода OnStart как можно быстрее.

Когда от менеджера SCM поступает команда на остановку службы, срабатывает метод OnStop, который вызывает метод logger.Stop() . Дополнительная задержка позволит потоку логгера остановиться:

Protected override void OnStop() { logger.Stop(); Thread.Sleep(1000); }

Однако самого класса службы еще недостаточно. Нам необходимо еще создать устанощик службы.

Как запустить приложение в виде службы Windows



Можно ли запустить клиентское приложение в качестве службы? В одной из статей способы создания службы Windows штатными средствами ОС. Однако не каждое консольное приложение сможет запуститься как служба, а программы с графическим интерфейсом в принципе не умеют работать подобным образом. Но возможность запустить приложение как службу все же есть, и поможет нам в этом программа с оригинальным названием Non-Sucking Service Manager .

NSSM представляет из себя свободное программное обеспечение с открытым кодом и поддерживает все операционные системы Microsoft, начиная с Windows 2000 и заканчивая Windows 8. NSSM не требует установки, достаточно его загрузить и распаковать. В дистрибутив входят версии для 32- и 64-разрядных ОС. Взять программу можно с сайта nssm.cc, на данный момент последняя стабильная версия 2.21.1, которую я и буду использовать.
Для демонстрации возможностей NSSM попробуем запустить Блокнот Windows в качестве службы на Windows 8.1.

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

Для создания службы с именем notepad запускаем командную консоль, переходим в папку с распакованным NSSM (для 64-разрядной Windows) и вводим команду

Код:

Nssm install notepad

которая открывает окно графического инсталлятора NSSM. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:

На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.

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

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

На вкладке «Input/Output (I/O)» можно задать перенаправление ввода\вывода приложения в указанный файл.

На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.

Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:

Код:

Nssm install notepad "C:\Windows\system32\notepad.exe"

Управление службой

После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.

А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.

Настроить работу служб можно в специальном менеджере Windows. Чтобы открыть его, воспользуйтесь комбинацией клавиш Windows + R, в появившейся строке введите services.msc и нажмите Enter. Вы увидите такое же или похожее (если у вас одна из старых версий ОС) окно:

Менеджер отображает службы в виде таблицы. Здесь можно просмотреть список доступных служб, прочитать их краткое описание и узнать текущий статус. Особую важность представляет столбец «Тип запуска». Именно он показывает, включена ли конкретная служба и в каком режиме она запускается системой.

Кликнув дважды по одной из служб, вы откроете окно, в котором её можно отключить. Достаточно открыть пункт «Тип запуска», выбрать «Отключена» и нажать «Ок». Но среди прочих вариантов запуска есть значение «Вручную». В целях безопасности выбирайте именно его для всех служб, которые вы захотите отключить. Это позволит системе запускать службы, когда они действительно необходимы, и не тратить на них в остальное время.

Не отключайте службы полностью, а только переводите их в ручной режим.

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

Некоторые службы из нашего списка могут быть уже полностью отключёнными на вашем ПК или изначально работать в ручном режиме. В таком случае просто пропускайте их.

Ошибочные действия в процессе настройки служб могут привести к некорректной работе системы. Внося изменения, вы берёте ответственность на себя.

Чтобы изменения вступили в силу, после настройки не забудьте перезагрузить ПК.

Службы Windows, которые можно перевести в ручной режим работы

Русскоязычные названия некоторых служб из этого списка могут отличаться от тех, которые вы увидите на своём компьютере. Но это касается только формулировок. Если не сможете найти нужную службу по точному названию, ищите варианты, похожие по смыслу.

Windows 10

  • Функциональные возможности для подключённых пользователей и телеметрия (Connected User Experiences and Telemetry).
  • Служба диагностического отслеживания (Diagnostic Tracking Service).
  • dmwappushsvc.
  • Диспетчер скачанных карт (Downloaded Maps Manager) - если вы не используете приложение «Карты».
  • Служба сенсорной клавиатуры и панели рукописного ввода (Touch Keyboard and Handwriting Panel Service).
  • Служба защитника Windows (Windows Defender Service).

Windows 8/8.1

  • Служба политики диагностики (Diagnostic Policy Service).
  • Клиент отслеживания изменившихся связей (Distributed Link Tracking Client) - если компьютер не подключён ни к одной сети.
  • Вспомогательная служба IP (IP Helper) - если вы не используете IPv6-подключение.
  • Служба помощника по совместимости программ (Program Compatibility Assistant Service).
  • Диспетчер печати (Print Spooler) - если у вас нет принтера.
  • Удалённый реестр (Remote Registry) - эту службу можно полностью отключить.
  • Вторичный вход в систему (Secondary Logon).
  • Центр обеспечения безопасности (Security Center).
  • Модуль поддержки NetBIOS через TCP/IP (TCP/IP NetBIOS Helper).
  • Служба регистрации ошибок Windows (Windows Error Reporting Service).
  • Служба загрузки изображений Windows (Windows Image Acquisition, WIA) - если у вас нет сканера.
  • Windows Search - если вы не пользуетесь функцией поиска Windows.

Windows 7

  • Обозреватель компьютеров (Computer Browser) - если компьютер не подключён ни к одной сети.
  • Служба политики диагностики (Diagnostic Policy Service).
  • Клиент отслеживания изменившихся связей (Distributed Link Tracking Client) - если компьютер не подключён ни к одной сети.
  • Вспомогательная служба IP (IP Helper) - если вы не используете IPv6-подключение.
  • Автономные файлы (Offline Files).
  • Служба перечислителя переносных устройств (Portable Device Enumerator Service).
  • Диспетчер печати (Print Spooler) - если у вас нет принтера.
  • Защищённое хранилище (Protected Storage).
  • Удалённый реестр (Remote Registry) - эту службу можно полностью отключить.
  • Вторичный вход в систему (Secondary Logon).
  • Центр обеспечения безопасности (Security Center).
  • Сервер (Server) - если компьютер не используется как сервер.
  • Модуль поддержки NetBIOS через TCP/IP (TCP/IP NetBIOS Helper).
  • Служба регистрации ошибок Windows (Windows Error Reporting Service).
  • Windows Search - если вы не пользуетесь функцией поиска Windows.

Windows Vista

  • Обозреватель компьютеров (Computer Browser) - если компьютер не подключён ни к одной сети.
  • Диспетчер сеансов диспетчера окон рабочего стола (Desktop Window Manager Session Manager) - если не используете тему оформления Aero.
  • Служба политики диагностики (Diagnostic Policy Service).
  • Клиент отслеживания изменившихся связей (Distributed Link Tracking Client) - если компьютер не подключён ни к одной сети.
  • Автономные файлы (Offline Files).
  • Служба перечислителя переносных устройств (Portable Device Enumerator Service).
  • Диспетчер печати (Print Spooler) - если у вас нет принтера.
  • ReadyBoost.
  • Удалённый реестр (Remote Registry) - эту службу можно полностью отключить.
  • Вторичный вход в систему (Secondary Logon).
  • Центр обеспечения безопасности (Security Center).
  • Сервер (Server) - если компьютер не используется как сервер.
  • Служба ввода планшетного ПК (Tablet PC Input Service).
  • Модуль поддержки NetBIOS через TCP/IP (TCP/IP NetBIOS Helper).
  • Темы (Themes) - если вы используете классическую тему Windows.
  • Служба регистрации ошибок Windows (Windows Error Reporting Service).
  • Модуль запуска службы Windows Media Center (Windows Media Center Service Launcher).
  • Windows Search - если вы не пользуетесь функцией поиска Windows.

Windows XP

  • Оповещатель (Alerter).
  • Обозреватель компьютеров (Computer Browser) - если компьютер не подключён ни к одной сети.
  • Клиент отслеживания изменившихся связей (Distributed Link Tracking Client) - если компьютер не подключён ни к одной сети.
  • Служба индексирования (Indexing Service) - если вы не пользуетесь поиском Windows.
  • Брандмауэр интернета (ICF) / Общий доступ к интернету (ICS) (Internet Connection Firewall / Internet Connection Sharing).
  • Служба сообщений (Messenger).
  • Удалённый реестр (Remote Registry) - эту службу можно полностью отключить.
  • Вторичный вход в систему (Secondary Logon).
  • Сервер (Server) - если компьютер не используется как сервер.
  • Служба восстановления системы (System Restore).
  • Модуль поддержки NetBIOS через TCP/IP (TCP/IP NetBIOS Helper).
  • Источник бесперебойного питания (Uninterruptible Power Supply).
  • Диспетчер отгрузки (Upload Manager).
  • Беспроводная настройка (Wireless Zero Configuration).
Случайные статьи

Вверх