Есть ли какой-нибудь быстрый способ при наличии исполняемого файла создать службу Windows, которая при запуске запускает ее?
Есть ли какой-нибудь быстрый способ при наличии исполняемого файла создать службу Windows, которая при запуске запускает ее?
Ответы:
Чтобы создать службу Windows из исполняемого файла, вы можете использовать sc.exe
:
sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"
Вы должны иметь кавычки вокруг фактического exe
пути и пробел после binPath=
.
Более подробную информацию о sc
команде можно найти в Microsoft KB251192 .
Обратите внимание, что он не будет работать только для любого исполняемого файла: исполняемый файл должен быть службой Windows ( т.е. реализовывать ServiceMain ). При регистрации исполняемого файла, не являющегося сервисом, в качестве сервиса, при попытке запуска сервиса вы получите следующую ошибку:
Ошибка 1053: служба не ответила на запрос запуска или управления своевременно.
Существуют инструменты, которые могут создавать службы Windows из произвольных необслуживаемых исполняемых файлов. Примеры других инструментов см. В других ответах.
binpath=
того, как окружать исполняемый путь двойными кавычками, совершенно неправильный, по крайней мере для окон 10. цитирование требуется тогда и только тогда, когда путь содержит специальные символы, такие как пробел. Кроме того, регистр (lowe / upper / mixed-case) нигде не имеет значения, в том числе и в именах переменных, и displayname="my service"
является еще одним плюсом для передачи в командной строке при создании службы для просмотра в качестве первой строки ( Name
) в services.msc
.
binPath=
Windows мне потребовалось место на Windows 7, но не на Windows 10
Используйте 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]
nginx
не нужно и вводит в заблуждение. Команда будет работать и без нее. Это необязательный параметр, если вы хотите указать имя службы из командной строки.
Многие существующие ответы включают вмешательство человека во время установки. Это может быть подвержен ошибкам процесс. Если у вас есть много исполняемых файлов, которые вы хотите установить в качестве сервисов, последнее, что вам нужно сделать, это сделать их вручную во время установки.
В связи с описанным выше сценарием я создал 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 create <service_name> binpath=<binary_path>
sc stop <service_name>
sc queryex <service_name>
sc delete <service_name>
Если в названии вашего сервиса есть пробелы, заключите его в "кавычки".
sc create <service_name> binpath= <binary_path>
Вы можете проверить мою маленькую бесплатную утилиту для операций create \ edit \ delete. Вот пример создания:
Зайдите в Сервис -> Изменить -> Создать
Исполняемый файл (Google Drive): [Скачать]
Исходный код: [Скачать]
Сообщение блога: [BlogLink]
Класс редактора сервиса: WinServiceUtils.cs