Anyone have suggestions what can that be?
Não é o que você quer ouvir, mas pode ser quase qualquer coisa. No momento, tudo que você realmente sabe é que o serviço às vezes demora muito para a inicialização ou o desligamento.
Você realmente precisa voltar para quem desenvolveu os serviços do .Net para ver se eles podem ajudar você a diagnosticar o problema.
Mas antes disso eu recomendaria que, em vez de usar o reinício, você tentasse parar e iniciar o serviço como duas ações distintas (com um pequeno intervalo entre elas). Isso pode ajudar a determinar se o problema é ao desligar o serviço ou ao iniciar o backup. Eles também podem achar útil se você puder determinar por quanto tempo um início e uma parada bem-sucedidos ocorrerão.
Você também deve verificar o log de eventos para ver se alguma outra informação está registrada.
Quando um serviço é iniciado, a fase de inicialização inicial deve estar concluída dentro de um tempo específico (normalmente 30 segundos). Portanto, um serviço normalmente tentaria manter a quantidade de código nesta seção no mínimo e iniciar um thread de segundo plano para executar o restante do trabalho.
Da mesma forma, quando você para um serviço, ele deve concluir esse processo dentro de um tempo específico (normalmente 20 segundos). Isso significa que qualquer operação de longa duração deve ser gravada de forma que possa ser cancelada se o serviço estiver sendo encerrado, em vez de aguardar até que a operação seja concluída.
Tudo o que fizer com que o período total de inicialização ou desligamento exceda o limite causará o erro que você está vendo.
Para dar alguns exemplos que podem causar o erro.
Suponha que na inicialização, seu serviço esteja realizando uma pesquisa de DNS para um nome de computador / servidor. Isso normalmente levaria milissegundos, mas se o DNS estiver configurado incorretamente no servidor, isso pode levar 15 segundos ou mais para ser concluído, o que talvez seja suficiente para levar o tempo total para a inicialização acima do limite. A segunda tentativa pode ter a entrada DNS armazenada em cache e, portanto, funcionar dentro do limite de tempo adequado.
Outra possibilidade é que o serviço esteja contando com um dispositivo ou recurso que foi suspenso e o tempo necessário para ativá-lo está ultrapassando o limite. Quando você tenta o serviço pela segunda vez, o dispositivo já está acordado e responde em tempo hábil.
Se os serviços do .Net forem amplamente utilizados, você poderá ter sorte e descobrir que alguém na Internet teve um problema semelhante e encontrou uma solução. Mas a causa real depende muito do que o serviço está realmente fazendo quando você está inicializando e desligando, e é por isso que seria melhor conversar com os desenvolvedores.