Serviço do Windows: especificando um comando de parada personalizado

Serviço do Windows: especificando um comando de parada personalizado

Temos um aplicativo personalizado que mexe com MUITOS recursos de terceiros. Ao rescindir, precisamos "desistir do contrato" graciosamente, por assim dizer.

O aplicativo em si é escrito em .NET Core (e tem como objetivo a verdadeira capacidade de execução multiplataforma). Usamos ExecStopo mecanismo do Systemd no Linux para chamar nosso script auxiliar personalizado ( myapp cli shutdown).

Esse script auxiliar também existe no Windows, mas não temos certeza de como vinculá-lo ao gerenciamento de serviços do Windows. Usamos o NSSM para manter o serviço continuamente ativo, mas estamos abertos a opções se isso puder ser alcançado.

Tentei pesquisar/pesquisar no StackExchange sobre um comando de parada personalizado no Windows, mas não encontrei nada.

Alguém sabe como podemos fazer isso?

Responder1

NSSMConfigurações da guia "Desligar"controlar o que acontece quando o serviço recebe uma solicitação de parada. É improvável que as opções de processo Control-C e Terminate sejam úteis, mas como seu aplicativo está em .NET, ele deve ser capaz de receber e responder WM_CLOSEe/ou WM_QUIT. Imagino que isso também seja possível no .NET Core, embora não tenha certeza dos detalhes.

ODaemon Apache Commonspode ser uma opção melhor para você. Embora tenha sido projetado principalmente para serviços escritos em Java, ele também pode executar executáveis ​​arbitrários e a --StopImageopção permite executar uma linha de comando quando o serviço recebe uma solicitação de parada.

No entanto, seria mais elegante se seu aplicativo fosse realmente um serviço, em vez de usar um wrapper de terceiros, como NSSM ou Apache Commons Daemon. Isso é fácil no .NET, mais difícil no .NET Core, mas uma pesquisa no Google apareceuComo criar serviços .NET Core Windows com Visual Studio 2017o que deve ajudar você a começar.

Se precisar de mais detalhes sobre a implementação direta de um serviço, você provavelmente deveria perguntar no Stack Overflow, já que se trata mais de programação do Windows do que de administração de sistemas.

informação relacionada