Servicio de Windows: especificar un comando de parada personalizado

Servicio de Windows: especificar un comando de parada personalizado

Tenemos una aplicación personalizada que interfiere con MUCHOS recursos de terceros. Al rescindir, debemos "renunciar al contrato de arrendamiento" con gracia, por así decirlo.

La aplicación en sí está escrita en .NET Core (y apunta a una verdadera capacidad de ejecución multiplataforma). Usamos ExecStopel mecanismo de Systemd en Linux para llamar a nuestro script auxiliar personalizado ( myapp cli shutdown).

Ese script auxiliar también existe en Windows, pero no estamos seguros de cómo vincularlo con la administración de servicios de Windows. Usamos NSSM para mantener el servicio en funcionamiento de forma continua, pero estamos abiertos a opciones si esto se puede lograr.

Intenté buscar en Google/buscar en StackExchange sobre un comando de parada personalizado en Windows, pero no encontré nada.

¿Alguien sabe cómo podemos lograr esto?

Respuesta1

NSSMConfiguración de la pestaña "Apagar"controlar lo que sucede cuando el servicio recibe una solicitud de detención. Es poco probable que las opciones de proceso Control-C y Terminar sean útiles, pero dado que su aplicación está en .NET, debería poder recibir y responder a WM_CLOSEy/o WM_QUIT. Imagino que esto también es posible en .NET Core, aunque no estoy seguro de los detalles.

ElDemonio de Apache Commonspodría ser una mejor opción para usted. Aunque está diseñado principalmente para servicios escritos en Java, también puede ejecutar ejecutables arbitrarios y la --StopImageopción le permite ejecutar una línea de comando cuando el servicio recibe una solicitud de detención.

Sin embargo, sería más elegante que su aplicación fuera realmente un servicio en lugar de utilizar un contenedor de terceros como NSSM o Apache Commons Daemon. Eso es fácil en .NET, más difícil en .NET Core, pero apareció una búsqueda en GoogleCómo crear servicios .NET Core Windows con Visual Studio 2017lo que debería ayudarte a empezar.

Si necesita más detalles sobre la implementación de un servicio directamente, probablemente debería preguntar en Stack Overflow, ya que se trata más de programación de Windows que de administración de sistemas.

información relacionada