Crear servicio de Windows desde ejecutable
¿Existe alguna forma rápida de, dado un archivo ejecutable, crear un servicio de Windows que, cuando se inicie, lo inicie?
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 exe
ruta real y un espacio después del binPath=
.
sc
Puede 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.
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 con
nssm.exe install [serviceName]
- Paso 3 : Esto abrirá una GUI que utilizará para localizar su ejecutable.
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
Más información en: https://nssm.cc/usage
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".
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. stdout
y stderr
todos 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>