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

1

Temos um aplicativo personalizado que mexe com muitos recursos de terceiros. Ao terminar, precisamos graciosamente "desistir do arrendamento" por assim dizer.

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

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

Eu tentei pesquisar / pesquisar o StackExchange sobre um comando de parada personalizado no Windows, mas acabei vazios.

Alguém sabe como podemos conseguir isso?

    
por Paul S. 07.09.2018 / 12:00

1 resposta

0

As configurações da guia "Desligamento" do NSSM controlam 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á no .NET, ele deve receber e responder a WM_CLOSE e / ou WM_QUIT . Eu imagino que isso também é possível no .NET Core, embora eu não tenha certeza dos detalhes.

O Apache Commons Daemon pode ser mais adequado para você. Embora seja projetado principalmente para serviços escritos em Java, ele também pode executar executáveis arbitrários, e a opção --StopImage permite executar uma linha de comando quando o serviço recebe uma solicitação de parada.

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

Se você precisar de mais detalhes sobre como implementar um serviço diretamente, provavelmente deverá perguntar sobre o Stack Overflow, já que isso é mais sobre programação do Windows do que administração de sistemas.

    
por 08.09.2018 / 01:10