Come verificherebbe se un servizio WIN32 esiste e, in caso affermativo, fare qualche operazione?Se il servizio esiste Condizione
risposta
Nella parte superiore della mia testa, è possibile verificare se un servizio specifico è in esecuzione, come menzionato da bmargulies, utilizzando il comando "net", piping il risultato in "find". Qualcosa come il seguente dovrebbe verificare se un servizio era in esecuzione, e in tal caso fermarlo. È quindi possibile avviarlo senza preoccuparsi se era già in esecuzione o meno:
net start | find "SomeService"
if ERRORLEVEL 1 net stop "SomeService"
net start "SomeService"
Se stai usando findstr di fare una ricerca, come alcune delle altre risposte hanno suggerito, allora si sarebbe verificare la presenza di ERRORLEVEL uguale a 0 (zero) ... se è allora avete trovato la stringa che stai cercando:
net start | findstr "SomeService"
if ERRORLEVEL 0 net stop "SomeService"
net start "SomeService"
Essenzialmente più comandi DOS fisserà ERRORLEVEL, che consente di controllare se qualcosa come un ritrovamento è riuscita.
Non è possibile farlo in DOS, poiché DOS non è Windows e non ha nemmeno il concetto di "servizio".
In un batch file di Windows è possibile utilizzare il comando sc
per trovare servizi:
sc query | findstr SERVICE_NAME
Ciò enumerare tutti i servizi e cedere loro rispettivi nomi.
È possibile cercare un determinato servizio con
sc query | findstr /C:"SERVICE_NAME: myservice"
Ricordate che questa ricerca è case-sensitive. È possibile aggiungere l'opzione /I
a findstr
per evitare ciò.
Come sull'utilizzo WMIC
:
Primo elenco di tutti i processi, quindi grep vostro nome del processo. Nessun risultato verrà stampato se non esiste.
wmic service |findstr "ProcessName"
Esempio:
C:\>wmic service |findstr "Search"
FALSE TRUE Windows Search
come funzionerebbe in una dichiarazione if? – Burt
@Burt: se la dichiarazione in quale lingua? batch, vbscript, C# o anche perl? Certamente sarà molto più semplice installare wc (parte di coreutils in gnu32), c:> wmic service | findstr "Cerca" | wc -l, quindi scrivere del codice per afferrare quel numero per determinare. –
Basta un addendum alla risposta accettata. Se stai cercando di fare altre cose oltre al semplice riavvio del servizio, e stai cercando di vedere se il servizio è installato.
sc query state= all | findstr /C:"SERVICE_NAME: MyService"
if ERRORLEVEL 0 (**My Operation**)
In questo caso, lo stato = tutto è importante in quanto se il servizio non è avviato, sarà interpretato come non installato, che sono due cose separate.
Come già detto, questo dovrebbe essere: 'se non ERRORLEVEL 1 (** My Operation **)' – bstoney
Non dovrebbe essere testato con successo: "if (not) errorlevel 1" ??
Nella shell di Windows "se errorlevel #" significa che il errorlevel è # o superiore, quindi "se errorlevel 0" è sempre vero.
che è una risposta a "come faccio a testare se l'esecuzione di un eseguibile ha funzionato" ma non ha nulla a che fare con vedere se un servizio è installato o in esecuzione –
Ho saputo, ma non ho avuto diritti di scrivere commenti in questo momento. – user2956477
sto usando il codice qui sotto:
SC QUERY | FIND "SERVICE_NAME: MyService"
IF %ERRORLEVEL% EQU 0 NET STOP MyService
Se MyService non viene trovato,% ERRORLEVEL% sarà fissato a 1 da FIND, altrimenti rimarrà a 0.L'istruzione IF% ERRORLEVEL% EQU 0 ti consente di testare quest'ultimo caso e procedere con un'operazione sul tuo servizio.
IF ERRORLEVEL 0 NET STOP MyService
non funzionerà, perché esegue il comando se% ERRORLEVEL% è maggiore o uguale a zero.
In un post evento di compilazione di Visual Studio, si deve porre:
EXIT 0
alla fine perché VS rileverà che% ERRORLEVEL% = 0 e si prenderà in considerazione che il post evento di compilazione non è riuscita . Usalo con attenzione perché questo nasconderà tutti gli errori nella sequenza dei comandi.
Con questo trucco, è possibile ignorare l'errore e utilizzare questo nel tuo post evento generazione per riavviare il servizio:
NET STOP MyService
NET START MyService
EXIT 0
- 1. Verificare se il servizio esiste con Ansible
- 2. Verificare se esiste un servizio web
- 3. LINQ - se condizione
- 4. Richiedi se in condizione di condizione SQL
- 5. F # se non condizione
- 6. Polvere se condizione
- 7. ricorsione se Condizione
- 8. multi condizione se istruzione C++
- 9. Problema in php se condizione
- 10. python se condizione e "e"
- 11. se let con condizione OR
- 12. prova se il file esiste
- 13. Rimuovere il file se esiste
- 14. Se esiste o esiste?
- 15. Linq: come escludere la condizione se il parametro è nullo
- 16. Selezionare il valore se la condizione in SQL Server
- 17. Sconcertante se condizione in funzione jQuery merge
- 18. Nega se la condizione in script bash
- 19. rapido, unwrapping opzionale, inversione se condizione
- 20. Condizione se differenze in C# e VB
- 21. Come fare "se non vera condizione"?
- 22. Utilizzando regex in Ruby se la condizione
- 23. Javascript formattazione per se la condizione
- 24. Verifica se una condizione è falsa
- 25. Se la condizione in LINQ Dove clausola
- 26. operatore virgola in se la condizione
- 27. Se la condizione all'interno caso interruttore
- 28. variabile Assegna all'interno di condizione, se vera
- 29. Sql Server unione con Se la condizione
- 30. Come scrivo questo se condizione con Jquery?
Che servizio su quale sistema? Si prega di fornire più contesti. –
Sarà un servizio locale, diciamo chiamato ABC. Devo riavviare il servizio se esiste come parte di un evento post build in Visual Studio. Gli eventi VS post build sono essenzialmente comandi batch/dos (??). – Burt