2009-10-12 25 views

risposta

16

There's a good example on how to set up a minimal service on MSDN. Vedere le parti sulla scrittura della funzione principale, del punto di ingresso e anche del codice di esempio.

Una volta creato e funzionante un servizio Windows, scoprirai il prossimo grande trambusto: è un problema eseguire il debug. Non esiste un terminale (e quindi nessun stdout/stderr) e non appena si tenta di eseguire l'eseguibile, in realtà viene avviato il servizio, quindi viene restituito all'utente.

Un trucco che ho trovato molto utile è aggiungere un'opzione -foreground alla tua app in modo tale che se si esegue con tale flag si ignora il codice di avviamento del servizio e invece si esegue come un'app console regolare, il che rende molto più facile eseguire il debug. In VS.Net imposta le opzioni di debug per invocare con quel flag.

+1

Qui ci sono alcuni suggerimenti utili per il debug (specialmente l'uso di gflags per avviare automaticamente il debugger): http: // support .microsoft.com/kb/824344 –

+0

aggiungo il -foreground alla riga di comando? – Maciek

+0

Sì, se si esegue senza flag, il servizio viene installato ed eseguito (questo è il modo in cui i servizi devono funzionare). Se si esegue l'opzione -foreground, si ignora il passaggio di installazione del servizio. –

2

La soluzione più semplice potrebbe essere quella di creare un nuovo progetto di servizio Windows in Visual Studio e copiare il codice nel nuovo progetto.

Se si effettua il refactoring del codice in modo da dividere l'interfaccia utente (in questo caso la console) dalla logica, è possibile creare una libreria che esegue il lavoro e quindi richiamarla dal progetto Console e dal progetto di servizio.

+0

Invece di tagliare e incollare caricare il codice di lavoro (- l'interfaccia utente) nel servizio come libreria – Patrick

0

Srvany consente un solo servizio alla volta. Così scrivo il mio srvany (sFany) per far funzionare nginx e php-cgi come servizio Windows insieme. Qui è la fonte https://github.com/stxh/sFany

3

C'è davvero un buon esempio su MSDN here

Si tratta di un progetto di servizio della caldaia piastra C++ che ha di sé installare/funzionalità di disinstallazione e servizio tronchi di inizio e di fermare gli eventi al registro eventi di Windows. Può essere fermato e avviato tramite l'app di servizi (snap-in) come altri servizi. Si consiglia di dargli inizialmente i diritti di LocalSystem per vederlo funzionare, poiché su xp almeno non ha diritti sufficienti per iniziare con i diritti forniti dal progetto di LocalService. In caso contrario, il progetto Visual Studio 2008 viene eseguito senza le istruzioni scaricate che implicano altrimenti.

Un po 'in ritardo ma spero che questo aiuti qualcun altro.

Problemi correlati