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

257

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

  • 7
    Вот инструкции Microsoft о том, как этого добиться.
Теги:
windows-services

7 ответов

330
Лучший ответ

Чтобы создать службу 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 из произвольных исполняемых файлов без обслуживания, см. другие ответы для примеров таких инструментов.

  • 6
    вам (почти наверняка) придется запустить командную строку от имени администратора, чтобы эта команда работала
  • 0
    Путь также должен быть полностью определенным путем - я не смог запустить службу, используя относительный путь.
Показать ещё 1 комментарий
160

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

http://nssm.cc/

  • Шаг 1: Загрузите NSSM
  • Шаг 2: Установите ваше устройство с помощью nssm.exe install [serviceName]
  • Шаг 3. Это откроет графический интерфейс, который вы будете использовать для поиска исполняемого файла.
  • 5
    Лучший менеджер по обслуживанию. Мне даже удалось заставить PlexWatch установить как службу, используя NSSM.
  • 0
    этот набор - услуга навсегда? каждый раз при запуске windows служба запускается? также как я могу сделать это без взаимодействия с пользователем? скрипт или код какой-то?
Показать ещё 5 комментариев
78
Ответ на вопрос о продлении (Кевин Тонг).

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

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

C:\> nssm.exe install [servicename]

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

Изображение 7285

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

  • 3
    Правильный синтаксис nssm.exe install [serviceName] . Это решение работает, но если у вас есть приложение с графическим интерфейсом, оно не будет работать на Win Serever2003. Если позже вы захотите удалить его, используйте nssm.exe remove [youservicename]
  • 1
    Я предполагаю, что ссылка на nginx объясняется тем, что именно эту программу вы хотите запускать в качестве службы? Пока я не увидел комментарий hmd выше, я думал, что вы пытаетесь помочь, подразумевая, что nginx является обязательной зависимостью для установки или чего-то еще ... но в GUI похоже, что вы не устанавливаете nginx, вы устанавливаете Unreal Tournament сервер? Просто указываю на то, что пример противоречив и потенциально вводит в заблуждение. Простое «Предположим, что вы хотите установить nginx как сервис, тогда это будет выглядеть так:» поможет.
Показать ещё 7 комментариев
8

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

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

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

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

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

0

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

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

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню