- Могу ли я создать службу Windows и как это сделать?
- Что мне нужно для создания службы Windows?
- Что такое менеджер службы без присасывания?
- Создание службы Windows с помощью NSSM
- Удаление службы Windows с помощью NSSM
- Как в Windows 10 создать собственную системную службу
- Чем службы отличаются от программ, добавленных в автозагрузку
- Создаем службу
- Удаление службы
Могу ли я создать службу Windows и как это сделать?
Иногда вам нужно приложение или скрипт, чтобы продолжать работать вне зависимости от того, авторизованы вы на своем компьютере или нет. Может быть, это сценарий PowerShell для мониторинга портов или веб-сервер, на котором размещена страница в вашей домашней сети.
Дело в том, что если вы хотите, чтобы процесс, сценарий или программа выполнялись, пока компьютер включен, вам необходимо создать службу Windows.
Что мне нужно для создания службы Windows?
Чтобы создать службу Windows в Windows 10, необходимо выполнить несколько предварительных условий:
- Доступ администратора на компьютере
- Что-то для запуска в качестве службы (сценарий PowerShell, программа и т.д.)
- Установлен Non-Sucking Service Manager (NSSM)
Что такое менеджер службы без присасывания?
Да, вы не можете отказаться от такого имени, не объяснив его. Конечно, название неудачное, но оно точное. Диспетчер служб Non-Sucking (NSSM), пожалуй, самый простой способ создать службу Windows, которая будет одновременно высоконадежной и настраиваемой. Кроме того, это бесплатное программное обеспечение с открытым исходным кодом (OSS).
NSSM можно использовать через командную строку Windows или графический интерфейс пользователя (GUI). Это означает, что им может пользоваться каждый. NSSM можно использовать в любой версии Windows, начиная с Windows 2000 включительно. Существуют 32-битные и 64-битные версии. Если вы используете 64-битный компьютер, сначала попробуйте эту версию. Если это не сработает, вернитесь к 32-битной версии.
Вы можете скачать NSSM с веб-сайта, клонировать NSSM из Git или установить NSSM с помощью Chocolatey. Chocolatey — это менеджер пакетов для Windows. Способы установки будут зависеть от выбранного вами маршрута. См. Инструкции NSSM. В нашем примере мы загружаем с веб-сайта NSSM и устанавливаем его в C:\WINDOWS\system32 .
Создание службы Windows с помощью NSSM
В этом примере мы создадим службу из сценария PowerShell для регистрации среднего процента загрузки ЦП.
- Скопируйте и сохраните этот сценарий как log-CPULoadPercentage.ps1 в месте, которое вряд ли будет доступно для кого-либо еще. Попробуйте создать каталог C:/Scripts и сохранить его там. Кроме того, создайте папку в скриптах под названием Logs. Обратите внимание, что путь к сценарию — C:/Scripts/log-CPULoadPercentage.ps1 . Это понадобится вам позже.
Примечание. Все строки ниже, за которыми следует символ #, являются комментариями и не влияют на сценарий.
- Это можно сделать либо в командной строке Windows, либо в PowerShell. Откройте его как администратор.
- Введите команду nssm install logCPUAvg и запустите ее. Откроется окно установщика службы NSSM.
- Нажмите кнопку с многоточием рядом с полем «Путь:» и перейдите к файлу powershell.exe, который обычно находится в папке C:\Windows\System32\ . Выберите powershell.exe. Путь: и каталог запуска: поля будут автоматически заполнены.
- Введите следующее в Arguments: поле: -ExecutionPolicy Bypass -NoProfile -File «C:\PathToScript\get-Script.ps1» , где последняя часть является путь к PowerShell сценария и имени сценария.
- Выберите вкладку Details. Введите то, что вы хотите, чтобы служба отображалась, как в диспетчере служб Windows, в поле Отображаемое имя:. Затем введите, что он делает, в поле Описание:. Тип запуска: может быть установлен как автоматический, автоматический (отложенный запуск), ручной или отключенный. Для этого упражнения подходит автоматический режим.
- Выберите вкладку Вход в систему. Установите переключатель «Эта учетная запись:» и введите учетную запись и пароль, от имени которых будет работать служба. Вам нужно будет выбрать учетную запись, под которой будет работать служба. В идеале у вас должна быть учетная запись Windows, созданная только для запуска этой службы. Разрешения этой учетной записи должны быть ограничены только тем, что нужно делать службе. Вы можете выбрать локальную системную учетную запись , но это не рекомендуется по соображениям безопасности.
Есть несколько других вкладок, которые можно использовать для настройки службы. Для этого упражнения достаточно значений по умолчанию на этих вкладках. Нажмите кнопку Установить службу.
- Когда служба будет установлена, вы увидите, что служба «logCPUAvg» успешно установлена! окно. Выберите ОК, чтобы закрыть его. На этом установка завершена.
- Откройте диспетчер служб Windows и убедитесь, что служба существует.
- Запустите службу, чтобы убедиться, что она будет работать.
- Чтобы убедиться, что эта служба запущена, с помощью проводника перейдите туда, где предполагается сохранить журнал, и проверьте, существует ли он.
Удаление службы Windows с помощью NSSM
Возможно, вам больше не нужно следить за загрузкой процессора, поэтому вы хотите избавиться от службы. К счастью, NSSM упрощает это.
- В диспетчере служб Windows остановите службу. Сделайте это, выбрав службу «Журнал средней загрузки ЦП», а затем либо нажав квадратную кнопку остановки на панели инструментов, либо ссылку «Остановить службу» слева.
- Откройте командную строку Windows или PowerShell от имени администратора.
- Введите команду nssm remove logCPUAvg и выполните команду.
- NSSM попросит вас подтвердить. Выберите Да .
- Когда служба будет удалена, вы увидите, что служба «logCPUAvg» успешно удалена! Подтверждение. Выберите ОК, и все готово.
Вот и все. Рекомендуется проверить диспетчер служб, чтобы убедиться, что службы больше нет. Если вы все еще видите службу, возможно, вам нужно обновить экран, и он должен исчезнуть.
Службы — отличный способ запускать приложения или скрипты, которые должны запускаться постоянно, перезапускаться в случае сбоя или требовать привилегий, отличных от текущего пользователя. Если вам не нужно ваше приложение или сценарий для выполнения всех этих задач, рассмотрите возможность использования запланированной задачи.
Как в Windows 10 создать собственную системную службу
Открыв Диспетчер задач и переключившись на вкладку «Подробности», можно обнаружить ряд процессов, которые явно не имеют никакого отношения к запущенным пользователем прикладным программам. Многие из таких процессов принадлежат службам — особым программным модулям, стартующим вместе с Windows, работающим в скрытом режиме и выполняющим подчас очень важную работу. Но тут у многих может возникнуть вопрос.
А разве прикладные программы не могут работать в скрытом режиме и точно так же запускаться вместе с Windows, будучи добавленными в автозагрузку?
Чем службы отличаются от программ, добавленных в автозагрузку
Это хороший вопрос, и на него можно ответить утвердительно, однако понятие «автозагрузка» часто употребляется в широком смысле слова без различия, что именно и как именно загружается. Если вы имеете общие представления о работе процессов Linux, то наверняка знакомы с такой сущностью как демон. Это процесс, но процесс несвязанный с каким-либо конкретным пользователем и работающий как-бы автономно. Службы в Windows очень похожи на этих самых демонов, они тоже независимы от пользователей. Когда вы добавляете в автозагрузку программу, пусть даже не имеющую графического интерфейса, она запускается в рабочем окружении пользователя при входе последнего в свою учетную запись, тогда как службы запускаются еще до ввода пользователем логина и пароля и напрямую с ним не взаимодействуют.
Теперь, когда вы поняли основную разницу между добавленными в автозагрузку приложениями и службами, мы научимся создавать такие службы сами и использовать их для разных целей, например, для мониторинга портов или еще чего-нибудь; главное — это найти программу или скрипт, который будет выполнять необходимое вам действие.
А еще вам понадобиться бесплатный инструмент Non-Sucking Service Manager, который «превратит» обычный процесс в службу. Название программы не очень благозвучное даже для носителя английского языка, но это не так уже и важно. Главное, что она работает. Скачать ее можно с сайта разработчика nssm.cc/download.
Создавать службу (чисто для примера) мы будем из процесса скрипта PowerShell , замеряющего среднее значения загруженности процессора и сохраняющего данные в текстовый лог.
Вот так он выглядит «изнутри».
Сначала проверим, работает ли сам скрипт. Кликаем по нему ПКМ и выбираем «Выполнить с помощью PowerShell».
Если в консоли будет выведен запрос на разрешение выполнения скриптов, вводим Y и нажимаем ввод .
Если скрипт заработал, вы увидите в консоли текст «Транскрибирование запущенно, выходной файл… и его адрес».
В результате в каталоге со скриптом у вас появится каталог «Logs» с файлом отчета в простом текстовом формате.
Создаем службу
Теперь переходим к работе с Non-Sucking Service Manager. Открыв от имени администратора командную строку и перейдя в расположение исполняемого файла утилиты nssm.exe соответствующей разрядности, выполняем команду nssm install logCPUAvg , где logCPUAvg — имя новой службы.
В открывшемся окошке установщика вы увидите три поля:
- Path – в нем указываем путь к обработчику, то есть PowerShell, файл консоли находится в папке C:\Windows\System32\PowerShell .
- Startup directory – папка с исполняемым файлом обработчика, поле заполнится автоматически.
- Arguments – в этом поле прописываем команду -ExecutionPolicy Bypass -NoProfile -File «полный-путь-к-скрипту» .
Аргумент ExecutionPolicy нужен для предоставления скрипту временных прав на запуск. Если в качестве службы вы устанавливаете какую-нибудь утилиту, то поле может быть оставлено как пустым, так и с указанным в нём аргументом данной конкретной утилиты.
Всё готово, жмем «Install service», чтобы установить службу.
Окно установщика содержит и другие вкладки, дополнительные. Например, на вкладке «Details» можно указать описание и отображаемое в оснастке управления службами имя службы, которое будет отличаться от указанного в команде nssm install, а на вкладке «Log on» выбрать учетную запись, от имени которой станет работать служба.
По умолчанию создаваемая служба работает от имени самой системы, как и положено. Открыв оснастку управления службами, вы увидите в списке и свою службу. Она будет иметь тип запуска «Автоматически», но находиться в остановленном состоянии. Запустится она при следующей загрузке, либо вы сами можете ее запустить.
То, что скрипт заработал, станет видно из того, что в месте его расположения появится папка «Logs» , при этом вывод самой консоли будет скрыт. И вот что интересно. Запустив службу, мы вышли из учетной записи в 12.46, а затем вошли в нее в 12.50, но служба продолжала работать даже в наше отсутствие в системе! Это еще раз говорит о том, что системная служба не связана с пользовательским окружением.
Удаление службы
Помимо того, что вы можете остановить службу в оснастке, переведя ее в статус «Отключена», вы властны ее полностью удалить с помощью той же NSSM. Для этого в командной строке выполняем команду nssm remove имя-службы .
И подтверждаем действие нажатием кнопки «Да» в миниатюрном диалоговом окошке.
Ну вот, теперь вы знаете, как создавать собственные службы для утилит и скриптов, которые могут работать независимо от пользователя в скрытом режиме.