Створіть службу Windows із виконуваного файлу


Відповіді:


460

Щоб створити службу Windows з виконуваного файлу, ви можете використовувати sc.exe:

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

Ви повинні мати лапки навколо фактичного exeшляху та пробіл після binPath=.

Більше інформації про scкоманду можна знайти в Microsoft KB251192 .

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

Помилка 1053: Служба не вчасно відповіла на запит на запуск або контроль.

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


11
вам (майже напевно) доведеться запустити командний рядок як адміністратор, щоб ця команда працювала
Jeutnarg

2
Шлях також повинен бути повністю кваліфікованим шляхом - я не зміг розпочати службу, використовуючи відносний шлях.
RunOfTheShipe

4
простір після binpath=того, як потрібно оточувати виконуваний шлях з подвійними лапками, абсолютно невірно, принаймні для Windows 10. цитування потрібно, якщо і тільки якщо шлях містить спеціальні символи, як пробіл. Крім того, корпус (lowe / верхній / змішаний регістр) не має значення ніде, імена змінних теж displayname="my service"є ще одним смакотою для передачі командного рядка, створюючи службу для перегляду як перший рядок ( Name) в services.msc.

2
Місце binPath=для мене було потрібно для Windows 7, але не для Windows 10
datchung

242

Використовуйте NSSM ( не всмоктуючий диспетчер сервісів ), щоб запустити .BAT або будь-який файл .EXE як послугу.

http://nssm.cc/

  • Крок 1 : Завантажте NSSM
  • Крок 2. Встановіть свій пристрійnssm.exe install [serviceName]
  • Крок 3 : Це відкриє графічний інтерфейс, який ви використовуєте для пошуку свого виконуваного файлу

6
Кращий сервіс-менеджер коли-небудь. Мені навіть вдалося змусити PlexWatch встановити як послугу з використанням NSSM.
імператив

2
чи цей комплект є послугою назавжди? щоразу, коли Windows запускається, послуга почнеться? також як я можу це зробити без взаємодії з користувачем? сценарій чи код якогось?
Джон Деметріу

9
Це абсолютно чудово, я б хотів, щоб я міг прийняти цю відповідь замість першої, :-(
Німецький Латор

2
Я можу запустити Dropbox як сервіс на сервері. Абсолютно невсмоктуючий інструмент!
Баррі Гувенкая

1
Чи повинен файл EXE бути проектом служби Windows, щоб мати можливість працювати з nssm чи це може бути звичайний файл exe? Тому що, коли я використовую nssm, запускайте [ім'я сервісу], він відображає помилку, наприклад, служба Windows не може працювати з командний рядок тощо
Сандєєв

92

Розширена (Кевін Тонг) відповідь.

Крок 1. Завантажте та розпакуйте nssm-2.24.zip

Крок 2. З типу командного рядка:

C:\> nssm.exe install [servicename]

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

введіть тут опис зображення

Більше інформації на сайті: https://nssm.cc/usage


4
Правильний синтаксис nssm.exe install [serviceName]. Це рішення працює, але якщо у вас є програма GUI, він не працюватиме на програмі Win Serever2003. Якщо згодом ви хочете його видалити, використовуйтеnssm.exe remove [youservicename]
Хаммад Хан

1
Я припускаю, що посилання на nginx полягає в тому, що це конкретна програма, яку ви хочете запустити як послугу? Поки я не побачив коментар hmd вище, я подумав, що ви намагаєтеся допомогти, маючи на увазі, що для nginx потрібна залежність для встановлення чи щось таке ... але потім у графічному інтерфейсі виглядає так, що ви не встановлюєте nginx, ви встановлюєте нереальний турнір сервер? Просто зазначивши, що приклад є непослідовним та потенційно оманливим. Просте "Припустимо, ви хотіли встановити nginx як послугу, тоді це виглядатиме так:" допоможе.
flutefreak7

@ flutefreak7 так nginx, не потрібно і вводити в оману. Команда працюватиме і без неї. Це необов'язковий параметр, якщо ви хочете ввести ім'я служби з командного рядка.
Хаммад Хан

1
Коли я намагаюся використовувати nssm, мій Windows Forms up працює, але форма не відображається ... Чому?
Раденко Зек

Він працює у вашій програмі як служба Windows, більшість з них - для бекенда. Можливо також, що він працює як інше ім'я користувача root / admin. ви повинні це перевірити. Також більше інформації ви можете переглянути тут: nssm.cc/usage

16

Багато існуючих відповідей включають втручання людини під час встановлення. Це може бути процес, схильний до помилок. Якщо у вас є багато виконуваних файлів, які хотіли б встановити як сервіси, останнє, що ви хочете зробити, - це зробити їх вручну під час встановлення.

Назустріч описаному вище сценарію я створив серман , інструмент командного рядка для встановлення виконуваного файлу як сервісу. Все, що вам потрібно написати (і написати лише один раз), - це простий файл конфігурації служби разом із вашим виконуваним файлом. Біжи

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>

9

ці доповнення виявляються корисними .. потрібно виконати як адміністратор

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

Якщо у вашій службі є якісь пробіли, додайте їх у "лапки".


Немає команди INSTALL, ні в моєму Win Win 2003 sc.exe 5.2.3790.3959, ні в M $ F1
user6698332

1
Використовуйте «створити» замість «встановити». sc create <service_name> binpath= <binary_path>
CSquared

4

Я перевірив хороший продукт для цього: Завжди . Безкоштовно, але у них пробний період 30 днів, тож ви можете спробувати ...


0

Ви можете перевірити мою невелику безкоштовну утиліту для створення служб \ редагування \ видалення. Ось створити приклад:

Перейдіть до служби -> Змінити -> Створити

введіть тут опис зображення

Виконаний файл (google drive): [Завантажити]

Вихідний код: [Завантажити]

Запис у блозі: [BlogLink]

Клас сервісного редактора: WinServiceUtils.cs

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.