2011-10-20 4 views
23

Desidero riavviare il servizio di Windows utilizzando il prompt dei comandi nella sezione [Icons] utilizzando Inno Setup. Per favore aiutami a risolvere il problema.Come riavviare il servizio utilizzando il prompt dei comandi?

+0

non ho dato [una risposta a questa] (http://stackoverflow.com/questions/7803337/how-to-run-windows-start-service-using -inno-setup/7804288 # 7804288) nei commenti quando hai chiesto l'ultima volta? Utilizzare un EXE wrapper piccolo per fornire manifest per fornire le autorizzazioni necessarie e avviare/riavviare il servizio. – Deanna

+0

Questa domanda è off-topic in quanto chiede "come posso riavviare un servizio nel prompt dei comandi" e non è specifica per innosetup. – cybermonkey

risposta

31

È possibile utilizzare sc start [service] per avviare un servizio e sc stop [service] per interromperlo. Con alcuni servizi net start [service] sta facendo lo stesso.

Ma se si desidera utilizzarlo nello stesso batch, tenere presente che sc stop non attenderà che il servizio venga arrestato. In questo caso è necessario utilizzare net stop [service] seguito da net start [service]. Questo verrà eseguito in modo sincrono.

+0

L'uso di sc start + sc stop non funziona per me (la parte iniziale non funziona). Comunque usando net stop + net start funziona! –

+1

Hai provato a utilizzare le virgolette per il nome del servizio? – senyor

+3

'sc' ha il problema che non aspetta l'inizio/l'arresto per finire, invia solo una richiesta di avvio/arresto a un servizio - quindi non puoi' st fermare Foo && sc start Foo', perché fallisce - prova ad avviare il servizio prima che abbia finito di fermarsi. 'net' è quello corretto da usare qui, perché aspetta che l'inizio/l'arresto finiscano. –

1

È possibile avviare e interrompere e interrogare i servizi utilizzando il comando SC. Per quanto riguarda l'innosetup, non ne sono sicuro.

22

Si potrebbe creare un bat-file con seguente contenuto:

net stop "my service name" 
net start "my service name" 
5
net.exe stop "servicename" && net.exe start "servicename" 
+1

c'è un singolo cmd per riavviare il servizio? – Nithin

+0

non che io sappia di – oluies

+0

si potrebbe fare uno script che contiene net.exe stop% 1 && net.exe start% 1 – oluies

4

Per riavviare un servizio in esecuzione:

net stop "service name" && net start "service name" 

Tuttavia, se non si sa se il servizio è in esecuzione in primo luogo e desidera riavviarlo o avviarlo, utilizzare questo:

net stop "service name" & net start "service name" 

Funziona se il servizio è già in esecuzione o meno.

Per riferimento, ecco lo documentation sui simboli di elaborazione condizionale.

+0

la seconda versione con '||' è molto errata - se il servizio è in esecuzione, verrà arrestato, il comando avrà esito positivo e il secondo comando NON verrà eseguito affatto. prova 'echo a || echo b' –

+0

Giusto, mio ​​male. Risolto adesso! –

2

Questo è il mio codice, per avviare/interrompere un servizio di Windows utilizzando il comando SC. Se il servizio non si avvia/interrompe, stampa le informazioni del registro. Puoi provarlo con Inno Setup.

{ start a service } 
Exec(ExpandConstant('{cmd}'), '/C sc start ServiceName', '', 
    SW_HIDE, ewWaitUntilTerminated, ResultCode); 
Log('sc start ServiceName:'+SysErrorMessage(ResultCode)); 
{ stop a service } 
Exec(ExpandConstant('{cmd}'), '/C sc stop ServiceName', '', 
    SW_HIDE, ewWaitUntilTerminated, ResultCode); 
Log('sc stop ServiceName:'+SysErrorMessage(ResultCode));