Создать службу Windows из исполняемого файла - PullRequest
302 голосов
/ 27 августа 2010

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

Ответы [ 6 ]

407 голосов
/ 27 августа 2010

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

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

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

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

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

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

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

209 голосов
/ 30 марта 2013

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

http://nssm.cc/

  • Шаг 1 : Загрузить NSSM
  • Шаг 2 : установить службу с nssm.exe install [serviceName]
  • Шаг 3 : Это откроет графический интерфейс, который вы будете использовать, чтобы найти свой исполняемый файл
85 голосов
/ 29 октября 2014

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

Шаг 1: Скачать и распаковать nssm-2.24.zip

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

C:\> nssm.exe install [servicename]

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

enter image description here

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

13 голосов
/ 24 мая 2016

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

В соответствии с описанным выше сценарием я создал 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>
6 голосов
/ 12 мая 2017

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

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

Если в имени вашей службы есть пробелы, заключите в кавычки.

4 голосов
/ 01 июля 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...