Domanda

Io sto usando un file batch per arrestare un servizio di Windows. Sto usando il comando sc, ma sono aperto ad altre idee, data la domanda qui sotto. Il problema è che i proventi dei file batch , mentre il servizio si ferma (l'argomento stop a sc sembra solo di richiesta fermata - non wait per l'arresto).

Come faccio a modificare il file batch per non procedere , fino alla fermata è completa

È stato utile?

Soluzione

L'uso può utilizzare NET stop, che è sincrona, cioè si attenderà fino a quando il servizio viene arrestato.

See  - net stop

Altri suggerimenti

sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)

Come accennato in precedenza, NET STOP invierà un comando di arresto al servizio, ma, se il servizio richiede più di un certo periodo di tempo (20 secondi o giù di lì è la mia osservazione), NET STOP non aspetterà il servizio in realtà fermata prima di tornare.

Per mettere in pausa in realtà il file batch fino a quando il servizio viene arrestato, è necessario utilizzare un approccio come quelle descritte in queste discussioni:

Come verificare se un servizio è in esecuzione tramite file batch e avviarlo, se non è in esecuzione?

Arresto / Avvio un servizio di Windows remoto e in attesa di esso per aprire / chiudere

Credo net stop [Service] deve attendere fino a quando il servizio è completamente arrestato prima di passare. sc stop [Service] invia semplicemente un messaggio di "stop" al servizio.

Questo è un po 'grezzo, ma ha funzionato per me, al fine di garantire che ho potuto pianificare un file batch ogni giorno a essenzialmente riavviare un servizio.

NET STOP [Servizio]

: tryagain

Timeout / T 10 / NOBREAK

NET START [Servizio]

Se% ERRORLEVEL% NEQ 0 GOTO tryagain

Mi rendo conto che con questo frammento di codice che questo potrebbe comportare un ciclo infinito se il servizio è stato quello di non avviare correttamente. Volevo solo mostrare fondamentalmente come aggirare il problema utilizzando TIMEOUT in cui un servizio può richiedere più tempo di arresto di quello che il comando NET STOP permette.

Usa il simbolo && tra i comandi. Le attese simbolo && per finire il comando precedente prima di procedere al comando successivo.

Tutti i comandi devono essere alla stessa riga di comando. È possibile utilizzare il maggior numero di comandi che si desidera in una riga.

È possibile utilizzare anche il comando pause. Con questo, chiede di premere un tasto, prima di procedere alla successiva procedura.

Ad esempio:

sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo          [ "MyServiceName" service stopped ] && echo. && pause
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top