Как создать службу Windows

Иногда вам нужно, чтобы приложение или сценарий продолжали работать независимо от того, вошли вы в свой компьютер или нет. Возможно, это сценарий PowerShell для мониторинга портов(PowerShell script to monitor ports) или веб-сервера, на котором размещена страница в вашей домашней сети(web server hosting a page on your home network) .

Дело в том, что если вы хотите, чтобы процесс, сценарий или программа выполнялись, пока компьютер включен, вам необходимо создать службу Windows(Windows Service) .

Что мне нужно для создания службы Windows?(What Do I Need to Create a Windows Service?)

Чтобы создать службу Windows в Windows 10(Windows 10) , необходимо выполнить несколько предварительных условий: 

  • Доступ администратора(Administrator) на компьютере
  • Что-то для запуска в качестве службы ( сценарий PowerShell(PowerShell Script) , программа и т. д.)
  • Установлен Non-Sucking Service Manager ( NSSM )

Что такое Non-Sucking Service Manager?(What Is the Non-Sucking Service Manager?)

Да, вы не можете произнести такое имя, не объяснив его. Конечно, имя неудачное, но точное. Non-Sucking Service Manager ( NSSM ), возможно, является самым простым способом создания службы Windows , которая является одновременно высоконадежной и настраиваемой. Кроме того, это бесплатное программное обеспечение с открытым исходным кодом(Open Source Software) (OSS).

NSSM можно использовать через командную строку Windows(Windows Command Prompt) или графический интерфейс пользователя ( GUI ). Это означает, что любой может использовать его. NSSM можно использовать в любой версии Windows , начиная с Windows 2000 включительно . Есть 32-битная и 64-битная(32-bit and 64-bit) версии. Если вы используете 64-разрядный компьютер, сначала попробуйте эту версию. Если не поможет, вернитесь к 32-битной версии. 

Вы можете загрузить NSSM с веб-сайта(download NSSM from the website) , клонировать NSSM из Git(clone NSSM from Git) или установить NSSM с помощью Chocolatey(install NSSM with Chocolatey) . Chocolatey — менеджер пакетов для Windows(Chocolatey is a package manager for Windows) . Способы установки(Installation) будут различаться в зависимости от того, какой маршрут вы выберете. Пожалуйста(Please) , ознакомьтесь с инструкциями NSSM . В нашем примере мы загружаем его с веб-сайта NSSM и устанавливаем в C:\WINDOWS\system32 .

Создание службы Windows с помощью NSSM(Create a Windows Service With NSSM)

В этом примере мы создадим службу из сценария PowerShell(PowerShell script) для регистрации среднего процента загрузки ЦП(CPU average load percentage)

  1. Скопируйте и сохраните этот сценарий как log-CPULoadPercentage.ps1 в месте, к которому никто другой не сможет получить доступ. Попробуйте создать каталог C:/Scripts и сохранить его там. Также создайте папку в Scripts под названием Logs . Обратите внимание, что путь к сценарию — C:/Scripts/log-CPULoadPercentage.ps1 . Это понадобится вам позже.

Примечание(Note) . Все строки ниже, за которыми следует символ #, являются комментариями и не влияют на сценарий.

CLS #Optional. I like to use this to clear the terminal when testing.

#Make sure you have a folder called Logs in the same directory as this script
#The log is where the records will be stored.
Start-Transcript -Path "$PSScriptRoot\Logs\log-CPULoadPercentage-$(get-date -f yyyy-MM-dd).txt" -Append

#While loop keeps it running until manually stopped
While ($True){
     #Creates a timestamp to know when the measurement was taken
     $timeStamp = get-date -f yyyy-MM-h:mm:ss

     #Gets the average load percentage at that time, then waits 5 seconds to do it again.
     $cpuLoadPercent = Get-CimInstance win32_processor | Measure-Object -Property LoadPercentage -Average | Select-Object Average;Start-Sleep -Seconds 5

     #Isolates just the average so there isn't a weird @{Average=13} string
     $cpuLoadPercent = $cpuLoadPercent.Average

     #writes results to screen, or in this case to the log
     Write-Host "$timeStamp CPU Load Percentage $cpuLoadPercent"
}

Stop-Transcript
  1. Это можно сделать либо в командной строке Windows(Windows Command Prompt) , либо в PowerShell. Откройте его от имени администратора(Open it as Administrator) .
  2. Введите команду nssm install logCPUAvg и запустите ее. Откроется окно установщика службы NSSM .(NSSM service installer)

  1. Нажмите кнопку(Click) с многоточием рядом с полем « Путь:(Path:) », перейдите к файлу powershell.exe(powershell.exe ) , который обычно находится по адресу C:\Windows\System32\ . Выберите powershell.exe. Поля Путь:(Path:) и Каталог запуска:(Startup directory:) будут заполнены автоматически.

  1. Введите следующее в поле « Аргументы»:(Arguments:) -ExecutionPolicy -ExecutionPolicy Bypass -NoProfile -File “C:\PathToScript\get-Script.ps1” , где последняя часть — это путь к вашему скрипту PowerShell и имя скрипта.  

  1. Выберите вкладку Подробности . (Details)Введите то, что вы хотите, чтобы служба отображалась в диспетчере (Windows) служб(Services) Windows , в поле « Отображаемое имя:(Display name: ) » . Затем введите, что он делает в поле « Описание:(Description:) » . Тип запуска:(Startup type: ) может быть установлен как автоматический(Automatic) , автоматический (отложенный запуск)(Automatic (Delayed Start)) , ручной(Manual) или отключенный(Disabled) . Для этого упражнения лучше подойдет автоматический режим.(Automatic)

  1. Выберите вкладку Вход(Log on ) . Выберите эту учетную запись(This account) : радиокнопку и введите учетную запись и пароль, под которыми будет работать служба. Вам нужно будет выбрать учетную запись, под которой будет работать служба. В идеале у вас должна быть учетная запись Windows , созданная только для запуска этой службы. Разрешения этой учетной записи должны быть ограничены только тем, что необходимо службе. Вы можете выбрать учетную запись Local System(Local System account) , но это не рекомендуется из соображений безопасности.

Есть несколько других вкладок, которые можно использовать для настройки службы. Для этого упражнения достаточно значений по умолчанию на этих вкладках. Нажмите кнопку Установить службу .(Install service )

  1. Когда служба будет установлена, вы увидите, что Service “logCPUAvg” installed successfully! окно. Выберите OK , чтобы закрыть его. На этом установка завершена.

  1. Откройте диспетчер служб Windows(Windows Services Manager ) и убедитесь, что служба есть.

  1. Запустите(Run) службу, чтобы убедиться, что она будет работать.

  1. Чтобы убедиться, что эта служба работает, используйте проводник(File Explorer ) , чтобы перейти туда, где должен быть сохранен журнал, и проверить, существует ли он.

nssm-check-log.png

Удаление службы Windows с помощью NSSM(Removing a Windows Service With NSSM)

Возможно, вам больше не нужно отслеживать(monitor your CPU) загрузку процессора, поэтому вы хотите избавиться от службы. К счастью, NSSM упрощает эту задачу. 

  1. В диспетчере служб Windows(Windows Services Manager) остановите службу. Для этого выберите службу Log CPU Average Load , затем щелкните квадратную кнопку остановки на панели инструментов или ссылку Stop the service слева.

  1. Откройте командную строку Windows(Windows Command Prompt ) или PowerShell от имени администратора.
  2. Введите команду nssm remove logCPUAvg и выполните команду. 

  1. NSSM попросит вас подтвердить. Выберите Да(Yes) .

  1. Когда служба будет удалена, вы увидите, что Service “logCPUAvg” removed successfully! Подтверждение. Выберите ОК(OK) , и все готово.

Это все. Рекомендуется проверить диспетчер служб, чтобы убедиться, что службы больше нет. Если вы все еще видите службу, вам может потребоваться обновить экран, и она должна исчезнуть.

Службы — отличный способ запускать приложения или сценарии, которые должны выполняться все время, перезапускаться в случае сбоя или требовать привилегий, отличных от текущего пользователя. Если вам не нужно ваше приложение или скрипт для выполнения всех этих задач, рассмотрите вместо этого использование запланированной задачи .(using a Scheduled Task)



About the author

Я старший инженер-программист и разработчик изображений и приложений для iPhone с более чем 10-летним опытом. Мои навыки работы с аппаратным и программным обеспечением делают меня идеально подходящим для любого проекта корпоративного или потребительского смартфона. У меня есть глубокое понимание того, как создавать высококачественные изображения и способность работать со всеми различными форматами изображений. Кроме того, я знаком с разработкой для Firefox и iOS.



Related posts