Как регистрировать службу windows

Как в 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» выбрать учетную запись, от имени которой станет работать служба.

Читайте также:  Aad broker plugin windows 10 что это

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

То, что скрипт заработал, станет видно из того, что в месте его расположения появится папка «Logs» , при этом вывод самой консоли будет скрыт. И вот что интересно. Запустив службу, мы вышли из учетной записи в 12.46, а затем вошли в нее в 12.50, но служба продолжала работать даже в наше отсутствие в системе! Это еще раз говорит о том, что системная служба не связана с пользовательским окружением.

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

Помимо того, что вы можете остановить службу в оснастке, переведя ее в статус «Отключена», вы властны ее полностью удалить с помощью той же NSSM. Для этого в командной строке выполняем команду nssm remove имя-службы .

И подтверждаем действие нажатием кнопки «Да» в миниатюрном диалоговом окошке.

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

Как создаются службы в Windows

Иногда требуется исполняемый файл зарегистрировать в качестве службы Windows. Имеется пара способов это сделать:
Для создания и службы из командной строки можно использовать программу SC (Sc.exe). SC представляет из себя утилиту командной строки, которая реализует вызовы ко всем функциям интерфейса прикладного программирования (API) управления службами Windows. С ее помощью можно производить любые действия со службами — просматривать состояние, управлять (запускать и останавливать), изменять параметры, а также создавать новые службы.

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

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

sc create [ServiceName] [binPath= ]

ServiceName — указывает имя, которое будет присвоено разделу службы в реестре. Имейте в виду, что это имя отличается от отображаемого имени службы (имени, которое отображается в оснастке «Services»);
binPath — указывает путь к исполняемому файлу службы.

Для примера создадим службу MyService, укажем отображаемое имя My New Service, зададим тип службы и поставим ее на авто-запуск:

Sc create MyService binPath=C:\MyService\MyService.exe DisplayName=″My New Service″ type=own start=auto

Затем откроем оснастку «Services» и посмотрим результат.
Изменять параметры уже созданной службы можно командой Sc config. Например, не понравилось отображаемое имя службы:
Sc config MyService DisplayName=″My Service″
Или полностью удалить службу:
Sc delete MyService

sc.exe создать sc.exe create

Создает подраздел и записи для службы в реестре и в базе данных диспетчера управления службами. Creates a subkey and entries for a service in the registry and in the Service Control Manager database.

Синтаксис Syntax

Параметры Parameters

Параметр Parameter Описание Description
Указывает имя удаленного сервера, на котором расположена служба. Specifies the name of the remote server on which the service is located. Имя должно использовать формат UNC (например, \ MyServer). The name must use the Universal Naming Convention (UNC) format (for example, \myserver). Чтобы запустить SC.exe локально, не используйте этот параметр. To run SC.exe locally, don’t use this parameter.
Указывает имя службы, возвращенное операцией жеткэйнаме . Specifies the service name returned by the getkeyname operation.
type= > Указывает тип службы. Specifies the service type. Эти способы могут быть следующими: The options include:
  • собственный — указывает службу, которая выполняется в собственном процессе. own — Specifies a service that runs in its own process. Он не предоставляет доступ к исполняемому файлу другим службам. It doesn’t share an executable file with other services. Это значение по умолчанию. This is the default value.
  • Share — указывает службу, которая выполняется как общий процесс. share — Specifies a service that runs as a shared process. Он использует исполняемый файл совместно с другими службами. It shares an executable file with other services.
  • kernel — указывает драйвер. kernel — Specifies a driver.
  • филесис — указывает драйвер файловой системы. filesys — Specifies a file system driver.
  • REC — указывает драйвер, распознаваемый файловой системой, который определяет файловые системы, используемые на компьютере. rec — Specifies a file system-recognized driver that identifies file systems used on the computer.
  • взаимодействие — указывает службу, которая может взаимодействовать с рабочим столом и получать входные данные от пользователей. interact — Specifies a service that can interact with the desktop, receiving input from users. Интерактивные службы должны запускаться под учетной записью LocalSystem. Interactive services must be run under the LocalSystem account. Этот тип должен использоваться в сочетании с Type = владеть или Type = Shared (например, Type = взаимодействиеType = владеет). This type must be used in conjunction with type= own or type= shared (for example, type= interacttype= own). При использовании типа = взаимодействие само по себе вызывает ошибку. Using type= interact by itself will generate an error.
start= Указывает тип запуска для службы. Specifies the start type for the service. Эти способы могут быть следующими: The options include:
  • Загрузка — указывает драйвер устройства, который загружается загрузчиком. boot — Specifies a device driver that is loaded by the boot loader.
  • система — указывает драйвер устройства, который запускается во время инициализации ядра. system — Specifies a device driver that is started during kernel initialization.
  • автоматически указывает службу, которая автоматически запускается при каждом перезапуске компьютера и выполняется, даже если никто из них не входит в систему. auto — Specifies a service that automatically starts each time the computer is restarted and runs even if no one logs on to the computer.
  • Demand — указывает службу, которая должна быть запущена вручную. demand — Specifies a service that must be started manually. Это значение по умолчанию, если Start = не задано. This is the default value if start= is not specified.
  • Disabled (отключено ) — указывает службу, которая не может быть запущена. disabled — Specifies a service that cannot be started. Чтобы запустить отключенную службу, измените тип запуска на другое значение. To start a disabled service, change the start type to some other value.
  • отложенный — автоматически указывает службу, которая запускается автоматически через некоторое время после запуска других автоматических служб. delayed-auto — Specifies a service that starts automatically a short time after other auto services are started.
error= Указывает серьезность ошибки, если служба не запускается при запуске компьютера. Specifies the severity of the error if the service fails to start when the computer is started. Эти способы могут быть следующими: The options include:
  • Обычная — указывает, что ошибка записывается в журнал и отображается окно сообщения, информирующее пользователя о том, что не удалось запустить службу. normal — Specifies that the error is logged and a message box is displayed, informing the user that a service has failed to start. Запуск будет продолжен. Startup will continue. Это параметр по умолчанию. This is the default setting.
  • серьезная — указывает, что ошибка регистрируется (по возможности). severe — Specifies that the error is logged (if possible). Компьютер пытается перезапуститься с последней удачной конфигурацией. The computer attempts to restart with the last-known good configuration. Это может привести к тому, что компьютер сможет перезапуститься, но служба по-прежнему может не запуститься. This could result in the computer being able to restart, but the service may still be unable to run.
  • критическая — указывает, что ошибка записывается в журнал (если возможно). critical — Specifies that the error is logged (if possible). Компьютер пытается перезапуститься с последней удачной конфигурацией. The computer attempts to restart with the last-known good configuration. Если последняя удачная конфигурация завершается сбоем, запуск также завершается сбоем, а процесс загрузки останавливается с ошибкой остановки. If the last-known good configuration fails, startup also fails, and the boot process halts with a Stop error.
  • Ignore — указывает, что ошибка записывается в журнал, и запуск продолжится. ignore — Specifies that the error is logged and startup continues. Пользователю не выдается уведомление, кроме записи ошибки в журнал событий. No notification is given to the user beyond recording the error in the Event Log.
binpath= Указывает путь к двоичному файлу службы. Specifies a path to the service binary file. Значение по умолчанию для BinPath =, и эта строка должна быть указана. There is no default for binpath=, and this string must be supplied.
group= Указывает имя группы, членом которой является эта служба. Specifies the name of the group of which this service is a member. Список групп хранится в реестре в подразделе хклм\систем\куррентконтролсет\контрол\сервицеграупордер . The list of groups is stored in the registry, in the HKLM\System\CurrentControlSet\Control\ServiceGroupOrder subkey. По умолчанию используется значение NULL. The default value is null.
tag= Указывает, следует ли получить TagID из вызова CreateService. Specifies whether or not to obtain a TagID from the CreateService call. Теги используются только для драйверов загрузки и запуска системы. Tags are used only for boot-start and system-start drivers.
depend= Указывает имена служб или групп, которые должны быть запущены перед этой службой. Specifies the names of services or groups that must start before this service. Имена разделяются косой чертой (/). The names are separated by forward slashes (/).
obj= <| > Указывает имя учетной записи, в которой будет выполняться служба, или задает имя объекта драйвера Windows, в котором будет выполняться драйвер. Specifies a name of an account in which a service will run, or specifies a name of the Windows driver object in which the driver will run. Значение по умолчанию — LocalSystem. The default setting is LocalSystem.
displayname= Указывает понятное имя для идентификации службы в программах пользовательского интерфейса. Specifies a friendly name for identifying the service in user interface programs. Например, имя подраздела одной конкретной службы — wuauserv, которое имеет более понятное отображаемое имя автоматическое обновление. For example, the subkey name of one particular service is wuauserv, which has a more friendly display name of Automatic Updates.
password=

Указывает пароль. Specifies a password. Это необходимо, если используется учетная запись, отличная от учетной записи LocalSystem. This is required if an account other than the LocalSystem account is used. /? /? Отображение справки в командной строке. Displays help at the command prompt.

Комментарии Remarks

Каждый параметр командной строки (параметр) должен включать знак равенства как часть имени параметра. Each command-line option (parameter) must include the equal sign as part of the option name.

Между параметром и его значением требуется пробел (например, Type = an). A space is required between an option and its value (for example, type= own. Если пространство не указано, операция завершается ошибкой. If the space is omitted, the operation fails.

Примеры Examples

Чтобы создать и зарегистрировать новый двоичный путь для службы невсервице , введите: To create and register a new binary path for the NewService service, type:

Читайте также:  Windows virtual key что это
Оцените статью