Serviço do Windows vs. Agendador de tarefas com gatilho de inicialização

Serviço do Windows vs. Agendador de tarefas com gatilho de inicialização

Estou executando um aplicativo de desktop como serviço com a ajuda do NSSM (Non Sucking Service Manager), que é um wrapper para aplicativos que não foram feitos para serem executados como um serviço.

Eu uso um laptop antigo com Windows 10 como servidor, executando alguns aplicativos como serviços do Windows. No laptop não há nenhum usuário logado, por isso requer menos recursos e graças aos serviços do Windows os aplicativos estão sempre rodando também quando o Windows instala novas atualizações e reinicia.

Agora eu preferiria que os aplicativos pudessem rodar sozinhos como serviços do Windows, sem a ajuda de outro aplicativo (NSSM), mas sei que isso nunca acontecerá. Os aplicativos são aplicativos de desktop e nunca foram projetados para serem executados como um serviço; os desenvolvedores nunca irão aprimorá-los com esse recurso. (Eu já perguntei.)

Na verdade, existe uma alternativa para executar um aplicativo como um serviço e seria iniciar o aplicativo com o Agendador de Tarefas com o gatilho "na inicialização do Windows".

Em ambos os casos o usuário não precisa estar logado e o computador pode reiniciar automaticamente e a aplicação deverá estar sempre disponível na rede. A vantagem do Agendador de Tarefas seria que a aplicação não necessita de nenhum wrapper (NSSM).

Mas não tenho muita certeza sobre a confiabilidade do Agendador de Tarefas. Um serviço do Windows destina-se a executar um aplicativo 24 horas por dia, 7 dias por semana e tem muitas opções de recuperação. O Agendador de Tarefas foi projetado para executar um aplicativo periodicamente e não 24 horas por dia, 7 dias por semana; portanto, não há nenhuma opção de recuperação.

Então minha pergunta é:

O Agendador de Tarefas com o gatilho "na inicialização do Windows" é uma alternativa válida para um serviço do Windows ou não?

Alguém tem experiência com os dois métodos e pode explicar melhor as vantagens e desvantagens de ambos?

Responder1

Sim, no seu caso de uso é, mas meu entendimento é que geralmente o agendador de tarefas espera que a tarefa termine em algum ponto (e de fato tem umopção padrãopara forçar o término da tarefa se ela não terminar sozinha) e você pode estar testando alguns limites arbitrários desconhecidos ou pelo menos imprevistos ao executá-la dessa maneira. Se você usar uma tarefa agendada, talvez seja melhor ter uma tarefa separada.tarefa agendada para iniciar o aplicativoe outro para parar (e/ou reiniciar) o aplicativo. Você pode agendar a tarefa inicial para ser executada na inicialização do Windows e executar as outras tarefas por meio do gerenciamento remoto.

Uma área onde não é equivalente são as dependências de serviço. Não há uma maneira integrada de fazer com que uma tarefa agendada dependa de outra para ser executada, mas você pode fazê-lo com serviços. Outra área seria o registro de eventos. Eu suspeito que nenhum deles seria útil no seu caso de uso, porque muitos aplicativos mantêm seus próprios logs, se necessário, e não dependem de outros aplicativos para serem executados.

Ambos têm opções de recuperação/reinicialização após falha

recuperação de serviço

recuperação de tarefa agendada

e ambos podem ser configurados para início atrasado após a inicialização.

inicialização atrasada do serviço

tarefa agendada atrasou inicialização

Responder2

Poderia deixar um comentário, porque o Google às vezes é útil, mas lembro que há muito tempo queria conseguir o mesmo. Nesse caso, usei um kit de recursos para Windows Server 2003. Ele continha uma ferramenta para criar um serviço. Infelizmente, não encontro informações sobre o que eu estava usando naquela época *.

Ainda assim, uma pesquisa no Google mostra muitos resultados:

1) Usandosc.exe https://support.microsoft.com/en-us/help/251192/how-to-create-a-windows-service-by-using-sc-exe

https://stackoverflow.com/questions/3663331/when-creating-a-service-with-sc-exe-how-to-pass-in-context-parameters

Aqui está um exemplo:

C:\Documents and Settings\Administrador> sc create asperacentral binPath= "C:\Arquivos de Programas\Aspera\Enterprise Server\bin\Debug\asperacentral.exe" DisplayName= "Aspera Central" start= auto

2) Usando *svrany: Essa era a ferramenta que eu estava usando, acabei de lembrar. Mas agora é bastante antigo e eu não sugiro que você o use, embora eu ache que ainda funciona (com o Windows 7 funciona).

3) Usando srvstart.exe: https://www.rozanski.org.uk/software

Uma ferramenta que ouvi há pouco tempo, nunca usei.

Tenho certeza de que existem muitos e muitos outros, mas eu tentaria o sc.exemétodo 1.

Responder3

Alterar a prioridade do aplicativo executado com o Agendador de Tarefas do Windows é complicado. Mas não sei sobre serviço.

informação relacionada