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

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

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

http://nssm.cc/

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

Ответ 3

Ответ на вопрос о продлении (Кевин Тонг).

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

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

C:\> nssm.exe install [servicename]

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

enter image description here

Дополнительная информация о: https://nssm.cc/usage

Ответ 4

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

На пути к вышеописанному сценарию я создал 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>

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

По некоторым причинам я не смог перезаписать путь к исполняемому каталогу с помощью NSSM.

Это то, что я сделал, чтобы иметь точку обслуживания для правильного исполняемого файла.

SC CONFIG YourServiceName binPath = "C:\SomeDirectory\YourFile.EXE" Подробнее...