Como eu posso sistematicamente desligar os serviços do Windows em ordem?

3

Temos este aplicativo de código aberto que possui três (3) serviços. Para o propósito desta pergunta, vamos chamá-los de A , B e C .

Agora, eles precisam ser fechados em uma ordem específica. Essa ordem seria A, depois B e C.

Se B desliga antes de A, então nos deparamos com todos os tipos de problemas. O mesmo é verdadeiro se C desligar antes de B ou A. Além disso, cada serviço pode demorar um tempo diferente para desligar devido ao número de usuários que o estava usando.

Oh, isso precisa ser embrulhado em um arquivo de lote do DOS ou algo que um usuário não-técnico poderia apenas dar um duplo clique para iniciar. (PowerShell não está fora de questão, mas eu nunca usei isso). Além disso, sou um codificador C # para que possa ser usado também.

De qualquer forma, quando a reinicialização é iniciada, o seguinte precisa acontecer:

1) Initiate shutdown of service A
2) When service A is down, it should trigger the shutdown of service B
3) When service B is down, it should trigger the shutdown of service C
4) When service C is down, it should trigger the START UP of service A
5) When service A is UP, it should trigger the START UP of service B
6) When service B is UP, it should trigger the START UP of service C

Então, como você pode ver, cada stop / start precisa esperar que o anterior esteja completamente terminado antes de prosseguir. E como cada serviço pode levar alguns segundos a alguns minutos, não podemos usar nenhum tipo de truque de tempo.

Sugestões muito apreciadas.

Obrigado!

    
por cbmeeks 07.09.2012 / 17:18

1 resposta

2

Você pode fazer isso usando o PowerShell. Para interromper um serviço, use o comando Stop-Service. Iniciar um serviço é com o comando Start-Service. Assim, você pode criar um script que tenha algumas entradas como as seguintes para cada serviço que você precisa interromper, na ordem:

Stop-Service ServiceA
do { Start-Sleep -Milliseconds 200}
until ((get-service ServiceA).status -eq 'Stopped')

e para iniciar os serviços:

Start-Service ServiceA
do { Start-Sleep -Milliseconds 200}
until ((get-service ServiceA).status -eq 'Running')

Você poderia então agrupar 6 desses blocos de código em um script, salvá-lo como um arquivo .ps1 e executá-lo no prompt do powershell da seguinte forma:

PS C:\> C:\Path\To\Script\script.ps1
    
por 07.09.2012 / 18:48