Есть ли какой-либо быстрый способ, с учетом исполняемого файла, создать службу Windows, которая при запуске запускает ее?
Чтобы создать службу 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 из произвольных исполняемых файлов без обслуживания, см. другие ответы для примеров таких инструментов.
Используйте NSSM (диспетчер служб несоответствия) для запуска.BAT или любого.EXE файла в качестве службы.
nssm.exe install [serviceName]
Шаг 1: Загрузите и распакуйте nssm-2.24.zip
Шаг 2: Из командной строки:
C:\> nssm.exe install [servicename]
он откроет графический интерфейс, как показано ниже (пример - сервер UT2003), а затем просто просмотрите его: yourapplication.exe
Дополнительная информация о: https://nssm.cc/usage
nssm.exe install [serviceName]
. Это решение работает, но если у вас есть приложение с графическим интерфейсом, оно не будет работать на Win Serever2003. Если позже вы захотите удалить его, используйте nssm.exe remove [youservicename]
Многие существующие ответы включают вмешательство человека во время установки. Это может быть процесс, подверженный ошибкам. Если у вас есть много исполняемых файлов, которые хотели бы быть установлены как службы, последнее, что вы хотите сделать, это сделать их вручную во время установки.
На пути к вышеописанному сценарию я создал 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>
эти дополнительные функции оказываются полезными.. необходимо выполнить как администратор
sc install <service_name> binpath=<binary_path>
sc stop <service_name>
sc queryex <service_name>
sc delete <service_name>
Если ваше имя службы имеет пробелы, заключите в "кавычки".
По некоторым причинам я не смог перезаписать путь к исполняемому каталогу с помощью NSSM.
Это то, что я сделал, чтобы иметь точку обслуживания для правильного исполняемого файла.
SC CONFIG YourServiceName binPath = "C:\SomeDirectory\YourFile.EXE" Подробнее...
Я тестировал хороший продукт для этого: AlwaysUp. Не бесплатно, но у них есть 30-дневный пробный период, поэтому вы можете попробовать...