Crear servicio de Windows desde ejecutable

Resuelto German Latorre asked hace 14 años • 12 respuestas

¿Existe alguna forma rápida de, dado un archivo ejecutable, crear un servicio de Windows que, cuando se inicie, lo inicie?

German Latorre avatar Aug 27 '10 14:08 German Latorre
Aceptado

Para crear un servicio de Windows a partir de un ejecutable, puede utilizar sc.exe:

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

Debe tener comillas alrededor de la exeruta real y un espacio después del binPath=.

scPuede encontrar más información sobre el comando en Microsoft KB251192 .

Tenga en cuenta que no funcionará con cualquier ejecutable: el ejecutable debe ser un servicio de Windows ( es decir, implementar ServiceMain ). Al registrar un ejecutable que no es un servicio como servicio, obtendrá el siguiente error al intentar iniciar el servicio:

Error 1053: El servicio no respondió oportunamente a la solicitud de inicio o control.

Existen herramientas que pueden crear un servicio de Windows a partir de ejecutables arbitrarios que no pertenecen al servicio; consulte las otras respuestas para ver ejemplos de dichas herramientas.

Sergii Pozharov avatar Aug 27 '2010 07:08 Sergii Pozharov

Utilice NSSM ( el administrador de servicios que no es Sucking ) para ejecutar un archivo .BAT o cualquier archivo .EXE como servicio.

http://nssm.cc/

  • Paso 1 : Descargar NSSM
  • Paso 2 : Instale su servicio connssm.exe install [serviceName]
  • Paso 3 : Esto abrirá una GUI que utilizará para localizar su ejecutable.
Kevin Tong avatar Mar 30 '2013 14:03 Kevin Tong

Respuesta ampliada (Kevin Tong).

Paso 1: Descargue y descomprima nssm-2.24.zip

Paso 2: desde la línea de comando, escriba:

C:\> nssm.exe install [servicename]

Abrirá la GUI como se muestra a continuación (el ejemplo es el servidor UT2003), luego simplemente busque: yourapplication.exe

ingrese la descripción de la imagen aquí

Más información en: https://nssm.cc/usage

 avatar Oct 29 '2014 09:10

Estos extras resultaron útiles. Deben ejecutarse como administrador .

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

Si el nombre de su servicio tiene espacios, escríbalo entre "comillas".

PodTech.io avatar May 12 '2017 18:05 PodTech.io

Muchas respuestas existentes incluyen la intervención humana en el momento de la instalación. Este puede ser un proceso propenso a errores. Si desea instalar muchos ejecutables como servicios, lo último que desea hacer es hacerlos manualmente en el momento de la instalación.

Para el escenario descrito anteriormente, creé serman , una herramienta de línea de comandos para instalar un ejecutable como servicio. Todo lo que necesita escribir (y sólo escribir una vez) es un archivo de configuración de servicio simple junto con su ejecutable. Correr

serman install <path_to_config_file>

instalará el servicio. stdouty stderrtodos están registrados. Para obtener más información, eche un vistazo al sitio web del proyecto .

Un archivo de configuración funcional es muy simple, como se demuestra a continuación. Pero también tiene muchas funciones útiles, como <env>las <persistent_env>siguientes.

<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>
KFL avatar May 24 '2016 00:05 KFL