Crea servizio Windows da eseguibile


349

Esiste un modo rapido per, dato un file eseguibile, creare un servizio Windows che, quando avviato, lo avvia?


8
Ecco le istruzioni di Microsoft su come raggiungere questo obiettivo.
PiRX,

Risposte:


460

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

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

È necessario disporre di virgolette attorno al exepercorso effettivo e uno spazio dopo il binPath=.

Ulteriori informazioni sul sccomando sono disponibili in Microsoft KB251192 .

Si noti che non funzionerà per qualsiasi eseguibile: l'eseguibile deve essere un servizio Windows ( ovvero implementare ServiceMain ). Quando si registra un eseguibile non di servizio come servizio, si verifica il seguente errore quando si tenta di avviare il servizio:

Errore 1053: il servizio non ha risposto tempestivamente alla richiesta di avvio o controllo.

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


11
dovrai (quasi sicuramente) eseguire il prompt dei comandi come amministratore per far funzionare questo comando
Jeutnarg,

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

4
lo spazio dopo binpath=insieme a dover circondare il percorso eseguibile con virgolette doppie è totalmente sbagliato, almeno per Windows 10. la quotazione è richiesta se e solo se il percorso contiene caratteri speciali come spazi bianchi. inoltre, il case (lowe / upper / mixed-case) non importa da nessuna parte, anche nei nomi delle variabili, ed displayname="my service"è un altro vantaggio da passare sulla riga di comando durante la creazione di un servizio da visualizzare come prima riga ( Name) services.msc.

2
Lo spazio dopo è binPath=stato richiesto per me su Windows 7 ma non su Windows 10
datchung

242

Utilizzare NSSM ( il gestore del servizio non succhiante ) per eseguire un .BAT o qualsiasi file .EXE come servizio.

http://nssm.cc/

  • Passaggio 1 : Scarica NSSM
  • Passaggio 2 : installa il tuo servizio connssm.exe install [serviceName]
  • Passaggio 3 : si aprirà una GUI che verrà utilizzata per individuare il file eseguibile

6
Il miglior service manager di sempre. Sono anche riuscito a far installare PlexWatch come servizio tramite NSSM.
Imperativo

2
questo set è un servizio per sempre? ogni volta che Windows si avvia il servizio verrà avviato? anche come posso farlo senza l'interazione dell'utente? uno script o un codice di qualche tipo?
John Demetriou,

9
Questo è assolutamente fantastico, vorrei poter accettare questa risposta invece della prima, :-(
Latorre tedesco

2
Posso eseguire Dropbox come servizio sul server. Assolutamente uno strumento non succhiante!
Barry Guvenkaya,

1
Il file exe deve essere un progetto di servizio Windows, per poter funzionare con nssm o può essere un normale file exe? Perché quando uso nssm start [nome servizio] che mostra un errore simile, il servizio Windows non può essere eseguito da prompt dei comandi ecc.
Sanjeev,

92

Risposta estesa (Kevin Tong).

Passaggio 1: Scarica e decomprimi nssm-2.24.zip

Passaggio 2: dal tipo di riga di comando:

C:\> nssm.exe install [servicename]

aprirà la GUI come di seguito (l'esempio è il server UT2003), quindi sfoglialo semplicemente su: yourapplication.exe

inserisci qui la descrizione dell'immagine

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


4
Sintassi corretta nssm.exe install [serviceName]. Questa soluzione funziona ma se si dispone di un'applicazione GUI, non funzionerà su Win Serever2003. Se in seguito desideri rimuoverlo, utilizzanssm.exe remove [youservicename]
Hammad Khan il

1
Suppongo che il riferimento a nginx sia perché è quel particolare programma che si desidera eseguire come servizio? Fino a quando non ho visto il commento di hmd sopra ho pensato che stavi cercando di aiutare insinuando che nginx era una dipendenza richiesta da installare o qualcosa del genere ... ma poi nella GUI sembra che tu non stia installando nginx, stai installando un Unreal Tournament server? Basta sottolineare che l'esempio è incoerente e potenzialmente fuorviante. Un semplice "Supponiamo che tu volessi installare nginx come servizio, sarebbe così:" sarebbe di aiuto.
flutefreak7,

@ flutefreak7 sì, nginxnon è 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.
Hammad Khan,

1
Quando provo ad usare nssm il mio Windows Form up è in esecuzione ma il modulo non viene visualizzato ... Perché?
Radenko Zec,

Sta eseguendo la tua applicazione come servizio di Windows, la maggior parte sono per il back-end. Potrebbe anche essere in esecuzione come un altro nome utente root / admin. devi controllarlo. Puoi anche consultare ulteriori informazioni qui: nssm.cc/usage

16

Molte risposte esistenti includono l'intervento umano al momento dell'installazione. Questo può essere un processo soggetto a errori. Se hai molti eseguibili che vuoi 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 quello che devi scrivere (e scrivere solo una volta) è un semplice file di configurazione del servizio insieme al tuo eseguibile. Correre

serman install <path_to_config_file>

installerà il servizio. stdoute stderrsono tutti registrati. Per maggiori informazioni, dai un'occhiata al sito web del progetto .

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

<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>

9

questi extra si rivelano utili .. devono essere eseguiti come amministratore

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

Se il nome del tuo servizio ha spazi, racchiudi tra "virgolette".


Non ci sono comandi INSTALL né in My Win 2003 sc.exe 5.2.3790.3959, né in M $ F1
user6698332

1
Usa "crea" invece di "installa". sc create <service_name> binpath= <binary_path>
CSquared,

4

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


0

Puoi dare un'occhiata alla mia piccola utility gratuita per le operazioni di creazione / modifica \ eliminazione del servizio. Ecco un esempio di creazione:

Vai a Servizio -> Modifica -> Crea

inserisci qui la descrizione dell'immagine

File eseguibile (google drive): [Scarica]

Codice sorgente: [Scarica]

Post del blog: [BlogLink]

Classe dell'editor di servizio: WinServiceUtils.cs

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.