2010-08-27 25 views

risposta

310

Per creare un servizio di Windows da un file eseguibile, è possibile utilizzare sc.exe:

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>" 

è necessario avere le virgolette attorno alla attuale exe percorso, e uno spazio dopo la binPath=.

More information on the sc command can be found in Microsoft KB251192.

Si noti che non funzionerà per qualsiasi eseguibile: l'eseguibile deve essere un servizio di Windows (i.e. implement ServiceMain). Quando si registra un file eseguibile non di servizio come un servizio, si otterrà il seguente errore sul tentativo di avviare il servizio:

Errore 1053: Il servizio non ha risposto alla richiesta di avvio o controllo in modo tempestivo.

Esistono strumenti che possono creare un servizio Windows da eseguibili arbitrari non di servizio, vedere le altre risposte per esempi di tali strumenti.

+3

dovrai (quasi certamente) eseguire il prompt dei comandi come amministratore per far funzionare questo comando. – Jeutnarg

+0

Il percorso deve anche essere il percorso completo: non è possibile avviare il servizio utilizzando un percorso relativo. – RunOfTheShipe

+0

lo spazio dopo 'binpath =' insieme a dover racchiudere il percorso dell'eseguibile con virgolette è totalmente sbagliato, almeno per Windows 10. la citazione è necessaria se e solo se il percorso contiene caratteri speciali come spazi bianchi. inoltre, il case (lowe/upper/mixed-case) non ha importanza da nessuna parte, anche nei nomi delle variabili, e 'displayname =" il mio servizio "' è un'altra chicca da passare sulla linea di comando mentre si crea un servizio da visualizzare come prima riga ('Nome') in' services.msc'. – Chinggis6

142

Utilizzare NSSM (il gestore di servizi non Sucking) per eseguire un .BAT o qualsiasi file .EXE come servizio.

http://nssm.cc/

funziona per me :)

+3

Il miglior gestore di servizi di sempre. Sono persino riuscito a far installare PlexWatch come servizio utilizzando NSSM. – Imperative

+0

questo set è un servizio per sempre? ogni volta che Windows inizia il servizio inizierà? anche come posso fare questo senza l'interazione dell'utente? uno script o un codice di qualche tipo? –

+3

Questo è assolutamente fantastico, vorrei poter accettare questa risposta al posto del primo, :-( –

70

estensione (Kevin Tong) risposta.

Fase 1: Scarica & Unzip nssm-2.24.zip

Fase 2: comando Da tipo di linea:

C:\> nssm.exe install [servicename]

si aprirà GUI, come di seguito (l'esempio è il server UT2003), quindi basta sfogliarlo a: yourapplication.exe

enter image description here

Maggiori informazioni su: https://nssm.cc/usage

+2

Sintassi corretta 'installazione nssm.exe [ serviceName] '. Questa soluzione funziona ma se hai un'applicazione GUI, non funzionerà su Win Serever2003. Se in seguito vuoi rimuoverlo, usa' nssm.exe rimuovi [nomeutente] ' –

+1

Sto assumendo il riferimento a nginx è perché quello è il particolare programma che vuoi eseguire come servizio? Fino a quando ho visto il commento di hmd sopra ho pensato che stavi cercando di aiutare implicando che nginx era una dipendenza necessaria per l'installazione o qualcosa del genere ... ma poi nella GUI sembra che non stai installando nginx, stai installando un server Unreal Tournament? Basta sottolineare che l'esempio è incoerente e potenzialmente fuorviante. "Supponiamo di voler installare nginx come servizio, quindi piace così: "aiuterebbe. – flutefreak7

+0

@ flutefreak7 sì 'nginx' non è necessario e fuorviante. Il comando funzionerà anche senza di esso. È un parametro facoltativo se si desidera fornire il nome del servizio dal prompt dei comandi. –

6

Molte risposte esistenti includono l'intervento umano al momento dell'installazione. Questo può essere un processo soggetto a errori. Se hai molti programmi eseguibili da installare come servizi, l'ultima cosa che vuoi fare è eseguirli manualmente al momento dell'installazione.

Verso lo scenario sopra descritto, ho creato serman, uno strumento da riga di comando per installare un eseguibile come servizio. Tutto ciò che serve per scrivere (e scrivere solo una volta) è un semplice file di configurazione del servizio insieme al tuo eseguibile. Esegui

serman install <path_to_config_file> 

installerà il servizio. stdout e stderr sono tutti registrati. Per maggiori informazioni, dai uno sguardo allo project website.

Un file di configurazione di lavoro è molto semplice, come illustrato di seguito. Ma ha anche molte funzioni utili come <env> e <persistent_env> di seguito.

<service> 
    <id>hello</id> 
    <name>hello</name> 
    <description>This service runs the hello application</description> 

    <executable>node.exe</executable> 

    <!-- 
     {{dir}} will be expanded to the containing directory of your 
     config file, which is normally where your executable locates 
    --> 
    <arguments>"{{dir}}\hello.js"</arguments> 

    <logmode>rotate</logmode> 

    <!-- OPTIONAL FEATURE: 
     NODE_ENV=production will be an environment variable 
     available to your application, but not visible outside 
     of your application 
    --> 
    <env name="NODE_ENV" value="production"/> 

    <!-- OPTIONAL FEATURE: 
     FOO_SERVICE_PORT=8989 will be persisted as an environment 
     variable to the system. 
    --> 
    <persistent_env name="FOO_SERVICE_PORT" value="8989" /> 
</service> 
1

questi extra rivelarsi utile .. bisogno di essere eseguito come amministratore

sc install <service_name> binpath=<binary_path> 
sc stop <service_name> 
sc queryex <service_name> 
sc delete <service_name> 

Se il nome del servizio ha qualche spazi, racchiudere tra "virgolette".

0

Ho testato un buon prodotto per questo: AlwaysUp. Non è gratuito ma hanno un periodo di prova di 30 giorni, quindi puoi provarlo ...

0

Per alcune ragioni, non è stato possibile sovrascrivere il percorso della directory eseguibile utilizzando NSSM.

Questo è ciò che ho fatto per fare in modo che il servizio punti all'eseguibile corretto.

sc config YourServiceName binpath = "C: \ somedirectory \ YourFile.EXE" For more details

Problemi correlati