Idealmente, por uma questão de prática recomendada, os aplicativos de console (interativos) não devem estar em execução em um servidor. Coisas que requerem sessões de logon interativas não devem estar em execução em um servidor.
Os Serviços do Windows devem ser programados para tratar de eventos de desligamento . Esta é uma prática de desenvolvimento extremamente comum. O Windows envia uma notificação para todos os Serviços do Windows quando o sistema operacional está se preparando para o encerramento, especificamente para dar aos serviços tempo suficiente para que eles também possam ser encerrados de forma limpa. Se o seu serviço não fizer isso, infelizmente foi escrito por amadores e, idealmente, você procuraria um produto diferente que fosse projetado para ser executado como um serviço do Windows.
Em um mundo ideal, você deve ser capaz de reiniciar um Windows Server a qualquer momento, e todos os serviços em execução nesse servidor serão encerrados e reiniciados de maneira limpa, em uma unidade autônoma. e maneira sem cabeça . Qualquer falha é geralmente causada por incompetência do desenvolvedor do aplicativo para manipular adequadamente eventos de desligamento do sistema operacional ou por várias circunstâncias atenuantes que podem impedir o funcionamento normal de um serviço, como uma desconexão espontânea do LUN devido a uma falha de hardware ou algo assim.
Se você estiver precisando escrever um script para informar a um administrador de sistema como reiniciar o servidor, então você já usou as melhores práticas.
- Should every running service/application handle by itself the shutdown?
Sim.
- Should the admin follow the instruction to shutdown the server?
Isso é o que você pode precisar fazer se tiver aplicativos mal-escritos ou configurados em execução no seu servidor. Você pode conseguir fazer o script das ações do administrador para que o desligamento possa ser pelo menos automatizado. (Por exemplo, um script de desligamento .)
- Should another software exit every service/application and then shutdown the server?
Isso poderia teoricamente ser possível com um trabalho de desenvolvimento inteligente, mas seria criar uma máquina Rube Goldberg em resposta a um problema que não deveria ter existido se você estivesse apenas executando aplicativos de servidor no seu servidor, em vez de aplicativos clientes.