Чи є швидкий спосіб, задавши виконуваний файл, створити службу 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=
того, як потрібно оточувати виконуваний шлях з подвійними лапками, абсолютно невірно, принаймні для Windows 10. цитування потрібно, якщо і тільки якщо шлях містить спеціальні символи, як пробіл. Крім того, корпус (lowe / верхній / змішаний регістр) не має значення ніде, імена змінних теж displayname="my service"
є ще одним смакотою для передачі командного рядка, створюючи службу для перегляду як перший рядок ( Name
) в services.msc
.
binPath=
для мене було потрібно для 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]
. Це рішення працює, але якщо у вас є програма GUI, він не працюватиме на програмі Win Serever2003. Якщо згодом ви хочете його видалити, використовуйтеnssm.exe remove [youservicename]
nginx
, не потрібно і вводити в оману. Команда працюватиме і без неї. Це необов'язковий параметр, якщо ви хочете ввести ім'я служби з командного рядка.
Багато існуючих відповідей включають втручання людини під час встановлення. Це може бути процес, схильний до помилок. Якщо у вас є багато виконуваних файлів, які хотіли б встановити як сервіси, останнє, що ви хочете зробити, - це зробити їх вручну під час встановлення.
Назустріч описаному вище сценарію я створив серман , інструмент командного рядка для встановлення виконуваного файлу як сервісу. Все, що вам потрібно написати (і написати лише один раз), - це простий файл конфігурації служби разом із вашим виконуваним файлом. Біжи
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>
Ви можете перевірити мою невелику безкоштовну утиліту для створення служб \ редагування \ видалення. Ось створити приклад:
Перейдіть до служби -> Змінити -> Створити
Виконаний файл (google drive): [Завантажити]
Вихідний код: [Завантажити]
Запис у блозі: [BlogLink]
Клас сервісного редактора: WinServiceUtils.cs