Службы как тип приложений
Размещение сквозной ссылки
Службы Windows NT, общие понятия
Служба Windows NT (Windows NT service) - специальный процесс, обладающий унифицированным интерфейсом для взаимодействия с операционной системой Windows NT. Службы делятся на два типа - службы Win32, взаимодействующие с операционной системой посредством диспетчера управления службами (Service Control Manager - SCM), и драйвера, работающие по протоколу драйвера устройства Windows NT. Далее в этой статье мы будем обсуждать только службы Win32.
Одним из важнейших свойств службы является неинтерактивность. Типичное службы - это незаметная для обычного пользователя работа в фоновом режиме. В силу этого службы наиболее подходят для реализации следующих типов приложений:
- Сервера в архитектуре клиент-сервер (например, MS SQL, MS Exchange Server)
- Сетевые службы Windows NT (Server, Workstation);
- Серверные (в смысле функциональности) компоненты распределенных приложений (например, всевозможные программы мониторинга).
Основные свойства служб
От обычного приложения Win32 службу отличают 3 основных свойства. Рассмотрим каждое из них.
Во-первых, это возможность корректного останова (приостанова) работы службы. Пользователь или другое приложение, использующие стандартные механизмы, имеют возможность изменить состояние службы - перевести ее из состояния выполнения в состояние паузы или даже остановить ее работу. При этом служба перед изменением своего состояния получает специальное уведомление, благодаря которому может совершить необходимые для перехода в новое состояние действия, например, освободить занятые ресурсы.
Взаимодействие службы с другими приложениями
Для управления службой необходимо в первую очередь получают ее дескриптор с помощью функции Win32 API OpenService. Функция StartService запускает службу. При необходимости изменение состояния службы производится вызовом функции ControlService.
База данных службы
Информация о каждой службе хранится в реестре - в ключе HKLM\SYSTEM\CurrentControlSet\Services\ServiceName. Там содержатся следующие сведения:
- Тип службы. Указывает на то, реализована ли в данном приложении только одна служба (эксклюзивная) или же их в приложении несколько. Эксклюзивная служба может работать в любом контексте безопасности. Несколько служб внутри одного приложения могут работать только в контексте LocalSystem.
- Тип запуска. Автоматический - служба запускается при старте системы. По требованию - служба запускается пользователем вручную. Деактивированный - служба не может быть запущена.
- Имя исполняемого модуля (EXE-файл).
- Порядок запуска по отношению к другим службам. В некоторых случаях для корректной работы службы требуется, чтобы была запущена одна или несколько других служб. В этом случае в реестре содержится информация о службах, запускаемых перед данной.
- Контекст безопасности выполнения службы (сетевое имя и пароль). По умолчанию контекст безопасности соответствует LocalSystem.
Приложения, которым требуется получить информацию о какой-либо службе или изменить тот или иной параметр службы, по сути должны изменить информацию в базе данных службы в реестре. Это можно сделать посредством соответствующих функций Win32 API:
- OpenSCManager, CreateService, OpenService, CloseServiceHandle - для создания (открытия) службы;
- QueryServiceConfig, QueryServiceObjectSecurity, EnumDependentServices, EnumServicesStatus - для получения информации о службе;
- ChangeServiceConfig, SetServiceObjectSecurity, LockServiceDatabase, UnlockServiceDatabase, QueryServiceLockStatus - для изменения конфигурационной информации службы.
Внутреннее устройство службы.
Для того, чтобы , приложение должно быть устроено соответствующим образом, а именно - включать в себя определенный набор функций (в терминах C++) с определенной функциональностью. Рассмотрим кратко каждую из них.
Функция main
Как известно функция main - точка входа любого консольного Win32 приложения. При запуске службы первым делом начинает выполняться код этой функции. Втечение 30 секунд с момента старта функция main должна обязательно вызвать StartServiceCtrlDispatcher для установления соединения между приложением и SCM. Все коммуникации между любой службой данного приложения и SCM осуществляются внутри функции StartServiceCtrlDispatcher, которая завершает работу только после остановки всех служб в приложении.
Функция ServiceMain
Помимо общепроцессной точки входа существует еще отдельная точка входа для каждой из служб, реализованных в приложении. Имена функций, являющихся точками входа служб (для простоты назовем их всех одинаково - ServiceMain), передаются SCM в одном из параметров при вызове StartServiceCtrlDispatcher. При запуске каждой службы для выполнения ServiceMain создается отдельный поток.
Получив управление, ServiceMain первым делом должна зарегистрировать обработчик запросов к службе, функцию Handler, свою для каждой из служб в приложении. После этого в ServiceMain обычно следуют какие-либо действия для инициализации службы - выделение памяти, чтение данных и т.п. Эти действия должны обязательно сопровождаться уведомлениями SCM о том, что служба все еще находится в процессе старта и никаких сбоев не произошло. Уведомления посылаются при помощи вызовов функции SetServiceStatus. Все вызовы, кроме самого последнего должны быть с параметром SERVICE_START_PENDING, а самый последний - с параметром SERVICE_RUNNING. Периодичность вызовов определяется разработчиком службы, исходя их следующего условия: продолжительность временного интервала между двумя соседними вызовами SetServiceStatus не должна превышать значения параметра dwWaitHint, переданного SCM при первом из двух вызовов. В противном случае SCM, не получив во-время очередного уведомления, принудительно остановит службу. Такой способ позволяет избежать ситуации службы на старте в результате возникновения тех или иных сбоев (вспомним, что службы обычно неинтерактивны и могут запускаться в отсутствие пользователя). Обычная практика заключается в том, что после завершения очередного шага инициализации происходит уведомление SCM.
Функция Handler
Один запрос следует отметить особо - запрос, поступающий при завершении работы системы (Shutdown). Этот запрос сигнализирует о необходимости выполнить деинициализацию и завершиться. Microsoft утверждает, что для завершения работы каждой службе выделяется 20 секунд, после чего она останавливается принудительно. Однако тесты показали, что это условие выполняется не всегда и служба принудительно останавливается до истечения этого промежутка времени.
Система безопасности служб
Любое действие над службами требует наличия соответствующих прав у приложения. Все приложения обладают правами на соединение с SCM, перечисление служб и проверку заблокированности БД службы. Регистрировать в сиситеме новую службу или блокировать БД службы могут только приложения, обладающие административными правами.
Каждая служба имеет дескриптор безопасности, описывающий какие пользователи имеют права на ту или иную операцию. По умолчанию:
- Все пользователи имеют права SERVICE_QUERY_CONFIG, SERVICE_QUERY_STATUS, SERVICE_ENUMERATE_DEPENDENTS, SERVICE_INTERROGATE и SERVICE_USER_DEFINED_CONTROL;
- Пользователи, входящие в группу Power Users и учетная запись LocalSystem дополнительно имеют права SERVICE_START, SERVICE_PAUSE_CONTINUE и SERVICE_STOP;
- Пользователи, входящие в группы Administrators и System Operators имеют право SERVICE_ALL_ACCESS.
Службы и интерактивность
По умолчанию интерактивные службы могут выполняться только в контексте безопасности LocalSystem. Это связано с особенностями вывода на экран монитора в Windows NT, где существует, например, такой объект как "Desktop", для работы с которым нужно иметь соответствующие права доступа, которых может не оказаться у произвольной учетной записи, отличной от LocalSystem. Несмотря на то, что в подавляющем большинстве случаев это ограничение несущественно однако иногда существует необходимость создать службу, которая выводила бы информацию на экран монитора и при этом выполнялась бы в контексте безопасности отличном от LocalSystem, например, серверная компонента приложения для запуска приложений на удаленном компьютере.
Фрагмент кода из Примера 1 . иллюстрирует такую возможность.
Пример службы (ключевые фрагменты)
Рассмотрим на примере ключевые фрагменты приложения на языке С++, реализующего службу Windows NT. Для наглядности несущественные части кода опущены.
Функция main
В Примере 2. показан код функции main.
Функция ServiceMain
Для преодоления этой проблемы все операции по взаимодействию с SCM следует выполнять в отдельном потоке, не зависящем от действий, происходящих на этапе инициализации.
В Примере 3. показан алгоритм корректного запуска службы, использующий вспомогательный поток.
Функция Handler
В Примере 4. показан код функции Handler и вспомогательных потоков. Для запросов "Stop" и "Shutdown" используется алгоритм корректного останова службы, аналогичный тому, который используется при старте службы, с той лишь разницей, что вместо параметра SERVICE_START_PENDING в SetserviceStatus передается параметр SERVICE_STOP_PENDING, а вместо SERVICE_RUNNING - SERVICE_STOPPED.
В идеале для запросов "Pause" и "Continue" тоже следует использовать этот подход. Любознательный читатель без труда сможет реализовать его, опираясь на данные примеры.
В заключение хотелось бы отметить, что с переходом на Windows NT 2000 разработка служб не претерпела изменений. Службы по-прежнему остаются важной частью программного обеспечения на платформе Windows, что предоставляет разработчикам широкое поле деятельности.
Одним из важнейших компонентов ОС Windows являются службы. Фактически это отдельные приложения, которые не имеют графического интерфейса и которые выполняют различные задачи в фоновом режиме. Службы могут быть запущены при старте операционной системы, так и в любой другой момент работы пользователя. Распространенным примером служб являются различные веб-серверы, которые в фоновом режиме прослушивают определенный порт на наличие подключений, и если подключения имеются, то взаимодействуют с ними. Это могут быть также различные вспомогательные сервисы обновлений для других установленных программ, которые обращаются к серверу, чтобы узнать, есть ли новая версия приложения. В общем то мы можем открыть панель служб и сами увидеть все установленные и запущенные службы:
Вначале создадим новый проект, который будет иметь тип Windows Service . Назовем проект FileWatcherService:
После этого Visual Studio генерирует проект, который имеет все необходимое. Хотя в принципе нам необязательно выбирать именно этот тип проекта, можно было бы создать проект библиотеки классов, и затем в нем определить все необходимые классы.
Итак, новый проект выглядит следующим образом:
Здесь также есть файл Program.cs и есть собственно узел службы Service1.cs .
Служба представляет обычное приложение, но она не запускаетс сама по себе. Все вызовы и обращения к ней проходят через менеджер управления службами (Service Control Manager или SCM). Когда служба запускается автоматически при старте системы или вручную, то SCM обращается к методу Main в классе Program:
Сама запускаемая служба представлена узлом Service1.cs. Однако на самом деле это не простой файл кода. Если мы откроем этот узел, то увидим в нем файл дизайнера службы Service1.Designer.cs и класс Service1.
Класс Service1 собственно представляет службу. По умолчанию он имеет следующий код:
Класс службы должен наследоваться от базового класса ServiceBase . Этот класс определяет ряд методов, важнейшие из которых метод OnStart() , который запускает действия, выпоняемые службой, и метод OnStop() , останавливающий службу.
После того, как SCM вызовет метод Main и зарегистрирует службу, происходит непосредственный ее вызов через запуск метода OnStart.
Когда в консоли служб или через командную строку мы посылаем команду на остановку службы, то SCM обращается к методу OnStop для ее остановки.
Кроме этих двух методов в классе службы можно переопределить еще несколько методов базового класса ServiceBase:
OnPause : вызывается при приостановке службы
OnContinue : вызывается при возобновлении работы службы после ее приостановки
OnShutdown : вызывается при завершении работы Windows
OnPowerEvent : вызывается при изменении режима электропитания
OnCustomCommand : вызывается при получении службой пользовательской команды от Менеджера Управления Службами (Service Control Manager / SCM)
В конструкторе класса Service1 вызывается метод InitializeComponent() , который определен в файле дизайнера Service1.Designer.cs:
Единственное, что надо в нем отметить, это установка названия службы (свойство ServiceName):
Это то название, которое будет отображаться в консоли служб после установки данной службы. Мы можем его изменить, а можем и оставить как есть.
Теперь изменим код службы следующим образом:
Ключевым классом, который инкапсулирует всю функциональность, является класс Logger. С помощью объекта FileSystemWatcher он будет вести мониторинг изменений в папке D://Temp. В методе Start() устанавливается, что мы будем отслеживать изменения через объект FileSystemWatcher. И вся работа будет идти, пока булевая переменная enabled равна true . А метод Stop() позволит завершить работу класса.
События FileSystemWatcher позволяют отслеживать все изменения в наблюдаемой папке. При этом будет вестись запись изменений в файл templog.txt. Чтобы не было гонки ресурсов за файл templog.txt, в который вносятся записи об изменениях, процедура записи блокируется заглушкой lock(obj) .
В итоге после создания, изменения, переименования и удаления файл лога будет содержать что-то наподобие:
В самом классе службы Service1 в конструкторе устанавливается ряд опций:
В методе OnStart() для запуска объекта Logger вызывется новый поток:
Новый поток нужен, так как текущий поток обрабатывает только команды SCM и должен возвращаться из метода OnStart как можно быстрее.
Когда от менеджера SCM поступает команда на остановку службы, срабатывает метод OnStop, который вызывает метод logger.Stop() . Дополнительная задержка позволит потоку логгера остановиться:
Однако самого класса службы еще недостаточно. Нам необходимо еще создать устанощик службы.
Эта документация не относится к последней версии службы Windows. Последние сведения о службах Windows с использованием BackgroundService, а также о шаблоне рабочей службы см. в следующих статьях:
Службы Microsoft Windows, ранее известные как службы NT, позволяют создавать долговременные исполняемые приложения, которые запускаются в собственных сеансах Windows. Для этих служб не предусмотрен пользовательский интерфейс. Они могут запускаться автоматически при загрузке компьютера, их также можно приостанавливать и перезапускать. Благодаря этому службы идеально подходят для использования на сервере, а также в ситуациях, когда необходимы долго выполняемые процессы, которые не мешают работе пользователей на том же компьютере. Службы могут выполняться в контексте безопасности определенной учетной записи пользователя, которая отличается от учетной записи вошедшего в систему пользователя или учетной записи компьютера по умолчанию. Дополнительные сведения о службах и сеансах Windows см. в документации по Windows SDK.
Можно легко создавать службы, создавая приложение, которое устанавливается как служба. Предположим, что вам нужно отслеживать данные счетчика производительности и реагировать на пороговые значения. Можно написать и развернуть приложение-службу Windows для прослушивания данных счетчиков, а затем начать сбор и анализ данных.
Служба будет создана как проект Microsoft Visual Studio с кодом, который определяет, какие команды могут отправляться службе и какие действия должны быть выполнены при получении этих команд. Команды, которые могут быть отправлены в службу, выполняют запуск, приостановку, возобновление и остановку службы. Также можно выполнять пользовательские команды.
Созданное приложение можно установить, запустив служебную программу командной строки InstallUtil.exe и передав путь к исполняемому файлу службы. Затем вы можете использовать диспетчер служб для запуска, остановки, приостановки, продолжения работы и настройки службы. Можно также выполнять многие из этих задач в узле Службы в обозревателе сервера или с помощью класса ServiceController.
Приложения-службы и другие приложения Visual Studio
Приложения-службы отличаются от других типов проектов следующим образом:
Скомпилированный исполняемый файл, созданный проектом приложения-службы, должен быть установлен на сервере, прежде чем этот проект можно будет использовать надлежащим способом. Вы не сможете выполнить отладку или запустить приложение службы, нажав клавиши F5 или F11. Вы не сможете сразу же запустить службу или открыть ее код. Вместо этого необходимо установить и запустить службу, а затем подключить отладчик к процессу службы. Дополнительные сведения см. в разделе Практическое руководство. Отладка приложений служб Windows.
В отличие от некоторых типов проектов для приложений-служб необходимо создавать компоненты установки. Компоненты установки устанавливают и регистрируют службу на сервере и создают для нее запись с помощью диспетчера служб Windows. Дополнительные сведения см. в разделе Практическое руководство. Добавление установщиков в приложение-службу.
Метод Main для приложения службы должен выдать команду запуска для служб, которые содержит проект. Метод Run загружает службы в диспетчер служб на соответствующем сервере. Если вы используете шаблон проекта служб Windows, этот метод создается автоматически. Обратите внимание, что загрузка службы — не то же самое, что ее запуск. Дополнительные сведения см. в разделе "Время существования службы".
Взаимодействие службы Windows с пользователем или другими станциями необходимо тщательно спроектировать, чтобы включить такие сценарии, когда вошедшего пользователя нет или у пользователя есть непредвиденный набор объектов рабочего стола. В некоторых случаях удобнее создать приложение Windows, которое будет выполняться под управлением пользователя.
Приложения-службы Windows выполняются в собственном контексте безопасности. Они запускаются, прежде чем пользователь войдет на компьютер Windows, на котором они установлены. Следует тщательно планировать, в какой учетной записи пользователя будет выполняться служба. Если это системная учетная запись, у службы будет больше разрешений и прав на доступ, чем при использовании учетной записи пользователя.
Время существования службы
Служба проходит через несколько внутренних состояний за время своего существования. Во-первых, служба устанавливается в системе, в которой она будет выполняться. Этот процесс выполняет установщики для проекта службы и загружает службу в диспетчер служб для этого компьютера. Диспетчер служб — это основное средство управления службами в Windows.
Загруженную службу необходимо запустить. Запущенная служба может выполнять свои задачи. Запустите службу из диспетчера служб или обозревателя сервера либо из кода, вызвав метод Start. Метод Start передает обработку в метод OnStart приложения и обрабатывает любой код, определенный там.
Запущенная служба может находиться в этом состоянии бесконечно, пока она не будет остановлена или приостановлена либо работа компьютера не будет завершена. Есть три основных состояния службы: Running, Paused и Stopped. Служба также может сообщать состояние ожидания выполнения команды: ContinuePending, PausePending, StartPending или StopPending. Эти состояния указывают, что команда выдана (например, команда для приостановки службы или запуска службы), но еще не выполнена. Вы можете запросить свойство Status, чтобы определить, в каком состоянии находится служба, или использовать WaitForStatus, чтобы выполнить действие при наступлении любого из этих состояний.
Вы можете приостановить, остановить или возобновить работу службы из диспетчера служб или обозревателя сервера либо из кода, вызвав методы. Каждое из этих действий вызывает соответствующую процедуру в службе (OnStop, OnPause или OnContinue), в которой можно определить дополнительную обработку на случай изменения состояния службы.
Типы служб
Вы можете время от времени встречать другие типы служб при выполнении запроса к службам, которые не были созданы в Visual Studio. Дополнительные сведения см. здесь: ServiceType.
Службы и компонент ServiceController
Компонент ServiceController используется для подключения к установленной службе и изменения ее состояния. С помощью компонента ServiceController вы можете запускать, останавливать, приостанавливать и продолжать работу службы, а также отправлять службе пользовательские команды. Использовать компонент ServiceController при создании приложения-службы не нужно. Фактически, в большинстве случаев компонент ServiceController должен находиться в приложении, отдельном от приложения-службы Windows, которое определяет службу.
Для получения дополнительной информации см. ServiceController.
Требования
Проекты, которые содержат службы Windows, должны включать компоненты установки для проекта и его служб. Это легко сделать с помощью окна свойств. Дополнительные сведения см. в разделе Практическое руководство. Добавление установщиков в приложение-службу.
Вы когда-нибудь задумывались, сколько функций Windows работает одновременно, даже если у них нет сложного интерфейса? Что ж, это всё службы Windows, которые работают в фоновом режиме, чтобы выполнять свою работу, не мешая вам.
Windows автоматически находит обновления, проверяет стабильность системы, подстраиваем время обновлений в зависимости от текущего часового пояса, записывает события и защищает систему от угроз. У всех этих функций нет работающего приложения на рабочем столе, тогда как ими управлять?
В этом посте мы подробно расскажем о службах Windows и о том, как вы можете настроить их в своих интересах.
Службы Windows в двух словах
Службы Windows – это, в основном, приложения, которые работают в фоновом режиме и предлагают свои «услуги». Эти службы выполняют большинство основных функций Windows, например подключение к внешним устройствам или создание стабильного подключения к Интернету.
Как и любое другое приложение, эти службы также используют системные ресурсы. Вы можете заметить, что при загрузке компьютера он сразу поглощает часть оперативной памяти, даже если приложения не открываются. Что ж, большая часть этой оперативной памяти используется этими службами Windows.
Обычно эти службы запускаются в Windows (даже до того, как вы входите в систему) и ничто не указывают на то, что они запущены. Однако, поскольку эти службы напрямую влияют на работу с Windows, очень важно знать, как ими управлять.
Например, вы можете отключить службы, которые вы не используете, чтобы освободить ресурсы и ускорить загрузку. Вы также можете заставить службы запускаться вручную вместо того, чтобы запускаться постоянно.
Кроме того, эти службы создаются не только Windows, сторонние приложения также могут создавать такие службы. Хорошим примером может служить служба обновления приложений, у которой нет интерфейса, но как только выйдет обновление, вы получите уведомление об обновлении приложения.
Доступ к службам Windows
Есть много способов получить доступ к средству управления службами Windows. Вы можете получить к нему доступ из панели управления в разделе «Инструменты администратора» или введите «Службы Windows» в системном поиске Windows, чтобы получить к нему доступ. Другой простой способ – нажать клавиши Win + R и ввести services.msc в диалоговом окне «Выполнить», чтобы открыть консоль управления службами Windows.
Вы увидите все службы Windows, перечисленные в правом столбце, и их описание в левом столбце. Нажмите на любую из служб, и вы увидите подробную информацию в левом столбце.
Описание достаточно хорошее, чтобы понять, что делает служба, поэтому у вас не должно возникнуть проблем с определением функций каждой из службы и их влияния.
Запуск, остановка или перезапуск службы
Вы можете принудительно запустить или остановить службу во время текущего сеанса Windows. Просто щелкните правой кнопкой мыши службу, и появится контекстное меню с пунктами Запустить или Остановить. Если служба уже запущена, можно будет использовать кнопку Остановить. В противном случае вы увидите Запустить, если служба не отключена.
Например, вы можете «Остановить» службу Центра обновления Windows, если выдаёт постоянные запросы. Имейте в виду, что служба будет автоматически запущена, когда вы перезагрузите компьютер, если её не отключить. Кроме того, есть вариант «Перезагрузки», которую можно использовать для перезапуска службы.
Свойства службы Windows
Окно «Свойства» – это самая важная часть консоли управления службами Windows, в которой перечислены все элементы управления и информация о службе. Щелкните правой кнопкой мыши службу и выберите Свойства.
Вот две важные вкладки: Общие и Зависимости. Ниже приводится объяснение каждой из них:
Общие свойства службы Windows
На вкладке Общие вы увидите путь к исполняемому файлу службы и описание того, что она делает. Вы также можете выбрать «Тип запуска», чтобы настроить запуск службы.
Там вы найдете четыре типа запуска:
- Автоматически (отложенный запуск): как упоминалось ранее, службы запускаются в Windows ещё до того, как вы войдете в систему; это влияет на общее время загрузки. Если вы считаете, что вам не нужна конкретная служба немедленно, вы можете установить для неё Отложенный запуск, чтобы она запускалась после полной загрузки ПК. Это ускорит загрузку Windows.
- Автоматически: любая служба, для которой установлен автоматический запуск, сразу же запускается вместе с Windows во время загрузки.
- Вручную: если вы хотите запускать службу по запросу или только тогда, когда это требуется системе, вы можете установить для неё значение Вручную. Такая служба будет запускаться только тогда, когда используется связанное с ней приложение / функция или вы вручную запустите её. Помните, что этот параметр нарушит работу служб, которые зависят от мониторинга в реальном времени, например, службы обновления Windows / приложений.
- Отключено: как следует из названия, это отключит службу и сделает её непригодной для использования.
Зависимости служб Windows
На этой вкладке перечислены все службы, зависящие от выбранной службы, а также службы, от которых зависит текущая выбранная служба. Прежде чем возиться с опциями «Тип запуска», проверьте все службы, которые зависят от службы.
Если вы отключите службу, все службы, которые от неё зависят, могут работать некорректно; или вообще не работать.
Использование служб Windows
Теперь, когда вы знаете о службах Windows и о том, как их настраивать, давайте посмотрим, чем они могут вам помочь. Многие службы Windows включены по умолчанию, но полезны не для всех пользователей.
Например, вы можете отключить службы факса, принтера или Bluetooth, если вы не используете их на своем ПК. Кроме того, вы также можете отключить такие службы, как брандмауэр Windows, если вы используете стороннее приложение брандмауэра.
С другой стороны, есть некоторые службы, которые отключены, но вы можете быть заинтересованы в их включении. Например, вы можете установить для службы «Удаленный реестр» значение Вручную, чтобы другие люди могли удаленно настраивать ваш реестр Windows.
Меры предосторожности
Включение или отключение этих служб может существенно повлиять на ваш компьютер. Если вы отключите базовую службу, это может остановить работу некоторых функций Windows или даже сделать её непригодной для использования.
Напротив, вы можете включить службу, которая может поставить под угрозу вашу безопасность. Например, служба «Удаленный реестр», которая позволяет удаленным пользователям настраивать реестр.
Перед включением или отключением любой из служб убедитесь, что вы прочитали и поняли описание и то, что она делает. Кроме того, перейдите на вкладку Зависимости и убедитесь, что служба не влияет на важные службы.
Несколько заключительных слов
Я лично просмотрел список и нашел несколько сервисов, которые стоит настроить и оптимизировать на моём компьютере. Я уверен, что вы тоже что-то найдёте.
Службы Windows - запущенные в фоне приложения, которые работают независимо от пользователя компьютера, и управляются непосредственно самой операционной системой. По умолчанию, службами являются строго определенные приложения, однако, ничто не мешает пользователю создать их самому. Выполнить данную задачу можно несколькими способами - с использованием стандартных средств Windows, либо с использованием сторонней программы NSSM.
Удаляется же служба еще проще:
Однако, у данного метода есть один большой существенный недостаток - с помощью данной утилиты создать службу можно только из программы, которая поддерживает работу службой. По этому, запустить какое попало приложение как службу данным способом не получится - но, можно воспользоваться сторонней утилитой NSSM, о которой речь пойдет ниже.
NSSM - программа, предназначенная для создания служб из исполняемых файлов Windows, в том числе и из графических утилит, что ставит её на уровень выше средств от Microsoft. С её помощью можно запускать большинство приложений, даже которые рассчитаны на взаимодействие с пользователем.
В архиве для скачивания можно найти версию для 64-битной версии Windows (папка win64), для 32-битной (папка win32) и исходные коды приложения (папка src). Выбираем нужное приложение под разрядность своей системы, копируем его в удобное для вас место на жестком диске. Никакая установка приложения не требуется.
- Предположим, нужно создать службу для веб-сервера nginx под Windows. Для этого, запускаем командную строку с правами администратора, и переходим в директорию с распакованным исполняемым файлом nssm.exe.
- Затем выполняем команду, начинающую установку службы:
- Откроется окно с настройками создаваемой службы.
На самой первой вкладке "Application", в строке "Path" задается путь к исполняемому файлу, "Startup Directory" - рабочая директория, а "Arguments" - параметры запуска. В самом низу расположена строка "Service Name", где задается имя создаваемого сервиса.
На вкладке "Details" можно задать имя, под которым будет отображаться создаваемая служба в списке служб, а так же описание службы, которое будет отображаться там же. В выпадающем списке "Startup Type" можно выбрать тип запуска службы.
Вкладка "Log on" позволяет указать пользователя, под которым будет запускаться служба.Заполним все нужные поля и выбрав нужные настройки, остается только нажать кнопку "Install service", для установки службы. - После нажатия кнопки "Install service", служба будет создана, но при этом запустить её нужно будет вручную (либо перезагрузить компьютер, чтобы служба с параметром запуска "Auto" запустилась при его запуске).
Читайте также: