Создать службу Windows из исполняемого файла

349

Есть ли какой-нибудь быстрый способ при наличии исполняемого файла создать службу Windows, которая при запуске запускает ее?

Немецкий латорре
источник
8
Вот инструкции Microsoft о том, как этого добиться.
PiRX

Ответы:

460

Чтобы создать службу Windows из исполняемого файла, вы можете использовать sc.exe:

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

Вы должны иметь кавычки вокруг фактического exeпути и пробел после binPath=.

Более подробную информацию о scкоманде можно найти в Microsoft KB251192 .

Обратите внимание, что он не будет работать только для любого исполняемого файла: исполняемый файл должен быть службой Windows ( т.е. реализовывать ServiceMain ). При регистрации исполняемого файла, не являющегося сервисом, в качестве сервиса, при попытке запуска сервиса вы получите следующую ошибку:

Ошибка 1053: служба не ответила на запрос запуска или управления своевременно.

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

Сергей Пожаров
источник
11
вам (почти наверняка) придется запустить командную строку от имени администратора, чтобы эта команда работала
Jeutnarg
2
Путь также должен быть полностью определенным путем - я не смог запустить службу, используя относительный путь.
RunOfTheShipe
4
пробел после binpath=того, как окружать исполняемый путь двойными кавычками, совершенно неправильный, по крайней мере для окон 10. цитирование требуется тогда и только тогда, когда путь содержит специальные символы, такие как пробел. Кроме того, регистр (lowe / upper / mixed-case) нигде не имеет значения, в том числе и в именах переменных, и displayname="my service"является еще одним плюсом для передачи в командной строке при создании службы для просмотра в качестве первой строки ( Name) в services.msc.
2
После binPath=Windows мне потребовалось место на Windows 7, но не на Windows 10
дата
242

Используйте NSSM ( диспетчер служб не для сосания), чтобы запустить .BAT или любой файл .EXE в качестве службы.

http://nssm.cc/

  • Шаг 1 : Загрузите NSSM
  • Шаг 2 : Установите сервис сnssm.exe install [serviceName]
  • Шаг 3 : Это откроет графический интерфейс, который вы будете использовать, чтобы найти свой исполняемый файл
Кевин Тонг
источник
6
Лучший менеджер по обслуживанию Мне даже удалось заставить PlexWatch установить как службу, используя NSSM.
императив
2
этот набор - услуга навсегда? каждый раз при запуске windows служба запускается? также как я могу сделать это без взаимодействия с пользователем? скрипт или код какой-то?
Джон Димитриу
9
Это очень здорово, я бы хотел принять этот ответ вместо первого :-(
German Latorre
2
Я могу запустить Dropbox как сервис на сервере. Абсолютно не сосущий инструмент!
Барри Гувенькая
1
Должен ли exe-файл быть проектом службы Windows, чтобы иметь возможность работать с nssm, или это может быть обычный exe-файл? командная строка и т. д.
Sanjeev
92

Расширяя (Кевин Тонг) ответ.

Шаг 1: Загрузите и распакуйте nssm-2.24.zip

Шаг 2: Из командной строки введите:

C:\> nssm.exe install [servicename]

он откроет графический интерфейс, как показано ниже (например, сервер UT2003), а затем просто перейдите к нему: yourapplication.exe

введите описание изображения здесь

Более подробная информация на: https://nssm.cc/usage


источник
4
Правильный синтаксис nssm.exe install [serviceName]. Это решение работает, но если у вас есть приложение с графическим интерфейсом, оно не будет работать на Win Serever2003. Если позже вы захотите удалить его, используйтеnssm.exe remove [youservicename]
Хаммад Хан
1
Я предполагаю, что ссылка на nginx связана с тем, что именно эту программу вы хотите запускать в качестве службы? Пока я не увидел комментарий hmd выше, я думал, что вы пытаетесь помочь, подразумевая, что nginx является обязательной зависимостью для установки или чего-то еще ... но в GUI похоже, что вы не устанавливаете nginx, вы устанавливаете Unreal Tournament сервер? Просто указываю на то, что пример противоречив и потенциально вводит в заблуждение. Простое «Предположим, вы хотите установить nginx как сервис, тогда это будет выглядеть так:» поможет.
flutefreak7
@ flutefreak7 да nginxне нужно и вводит в заблуждение. Команда будет работать и без нее. Это необязательный параметр, если вы хотите указать имя службы из командной строки.
Хаммад Хан
1
Когда я пытаюсь использовать nssm, запускается Windows Forms, но форма не отображается ... Почему?
Раденко Зец
Оно запускает ваше приложение как службу Windows, большинство из них для бэкэнда. Возможно также, что он работает под другим именем пользователя root / admin. Вы должны это проверить. Также больше информации вы можете проверить здесь: nssm.cc/usage
16

Многие существующие ответы включают вмешательство человека во время установки. Это может быть подвержен ошибкам процесс. Если у вас есть много исполняемых файлов, которые вы хотите установить в качестве сервисов, последнее, что вам нужно сделать, это сделать их вручную во время установки.

В связи с описанным выше сценарием я создал serman , инструмент командной строки для установки исполняемого файла в качестве службы. Все, что вам нужно написать (и написать только один раз), это простой файл конфигурации службы вместе с вашим исполняемым файлом. Бегать

serman install <path_to_config_file>

установит сервис. stdoutи stderrвсе вошли. Для получения дополнительной информации взгляните на веб-сайт проекта .

Рабочий файл конфигурации очень прост, как показано ниже. Но он также имеет много полезных функций, таких как<env> и <persistent_env>ниже.

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>

  <executable>node.exe</executable>

  <!-- 
       {{dir}} will be expanded to the containing directory of your 
       config file, which is normally where your executable locates 
   -->
  <arguments>"{{dir}}\hello.js"</arguments>

  <logmode>rotate</logmode>

  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable 
       available to your application, but not visible outside 
       of your application
   -->
  <env name="NODE_ENV" value="production"/>

  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable to the system.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>
КЛС
источник
9

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

sc create  <service_name> binpath=<binary_path>
sc stop    <service_name>
sc queryex <service_name>
sc delete  <service_name>

Если в названии вашего сервиса есть пробелы, заключите его в "кавычки".

PodTech.io
источник
Нет ни команды INSTALL ни в моем My Win 2003 sc.exe 5.2.3790.3959, ни в M $ F1
user6698332
1
Используйте «создать» вместо «установить». sc create <service_name> binpath= <binary_path>
CSquared
4

Я протестировал хороший продукт для этого: AlwaysUp . Не бесплатно, но у них есть 30-дневный пробный период, так что вы можете попробовать ...

А. Массон
источник
0

Вы можете проверить мою маленькую бесплатную утилиту для операций create \ edit \ delete. Вот пример создания:

Зайдите в Сервис -> Изменить -> Создать

введите описание изображения здесь

Исполняемый файл (Google Drive): [Скачать]

Исходный код: [Скачать]

Сообщение блога: [BlogLink]

Класс редактора сервиса: WinServiceUtils.cs

Сергей Ваулин
источник