Procedura dettagliata: creazione di un'applicazione di servizio Windows in Progettazione componenti
Nota
Il modello Servizio Windows e le relative funzionalità non sono disponibili nell'edizione Standard di Visual Studio.
Le procedure descritte in questa sezione consentono di creare un'applicazione di servizio Windows semplice che scrive messaggi in un log eventi. Le operazioni di base da eseguire per la creazione e l'utilizzo del servizio includono:
Creazione di un progetto mediante il modello di applicazione Servizio Windows. Tale modello crea automaticamente una classe che eredita da ServiceBase e scrive la maggior parte del codice di base del servizio, ad esempio il codice per avviare il servizio.
Scrittura del codice per le routine OnStart e OnStop ed esecuzione dell'override di ciascun metodo da ridefinire.
Aggiunta dei programmi di installazione necessari per l'applicazione di servizio. Per impostazione predefinita, quando si fa clic sul collegamento Aggiungi programma di installazione all'applicazione viene aggiunta una classe contenente due o più programmi di installazione, uno per installare il processo e uno per installare ciascuno servizio associato contenuto nel progetto.
Compilazione del progetto.
Creazione di un progetto di installazione e successiva installazione del servizio.
Accesso a Gestione controllo servizi di Windows 2000 e avvio del servizio.
Le prime operazioni da effettuare sono la creazione del progetto e l'impostazione dei valori necessari per garantire il corretto funzionamento del servizio.
Nota
Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.
Creazione di un servizio
Per creare e configurare il servizio
Scegliere Nuovo progetto dal menu File.
Verrà visualizzata la finestra di dialogo Nuovo progetto.
Selezionare Servizio Windows nell'elenco dei modelli di progetto di Visual Basic o Visual C#, quindi assegnare il nome MyNewService al progetto. Scegliere OK.
Nota
Il modello di progetto aggiunge automaticamente una classe di componente denominata Service1 che eredita dalla classe System.ServiceProcess.ServiceBase.
Fare clic nella finestra di progettazione per selezionare Service1, quindi nella finestra Proprietà impostare ServiceName e la proprietà (Nome) relativa a Service1 su MyNewService.
Aggiunta di funzionalità al servizio
Nella sezione successiva verrà aggiunto un log eventi personalizzato al servizio Windows. I log eventi non sono in alcun modo associati ai servizi Windows. In questa situazione il componente EventLog viene utilizzato come un esempio del tipo di componente che è possibile aggiungere a un servizio Windows.
Per aggiungere la funzionalità del log eventi personalizzato al servizio
In Esplora soluzioni fare clic con il pulsante destro del mouse su Service1.vb o Service1.cs, quindi scegliere Visualizza finestra di progettazione.
Dalla scheda Componenti della Casella degli strumenti trascinare un componente EventLog nella finestra di progettazione.
In Esplora soluzioni fare clic con il pulsante destro del mouse su Service1.vb o Service1.cs, quindi scegliere Visualizza codice.
Aggiungere o modificare il costruttore in modo da definire un log eventi personalizzato.
' To access the constructor in Visual Basic, select New from the ' method name drop-down list. Public Sub New() MyBase.New() InitializeComponent() If Not System.Diagnostics.EventLog.SourceExists("MySource") Then System.Diagnostics.EventLog.CreateEventSource("MySource", "MyNewLog") End If EventLog1.Source = "MySource" EventLog1.Log = "MyNewLog" End Sub
public MyNewService() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource","MyNewLog"); } eventLog1.Source = "MySource"; eventLog1.Log = "MyNewLog"; }
Per definire quello che accade quando il servizio viene avviato
Nell'editor di codice individuare il metodo OnStart di cui è stato eseguito automaticamente l'override al momento della creazione del progetto, quindi scrivere il codice per determinare le azioni relative alla fase iniziale dell'esecuzione del servizio:
' To access the OnStart in Visual Basic, select OnStart from the ' method name drop-down list. Protected Overrides Sub OnStart(ByVal args() As String) EventLog1.WriteEntry("In OnStart") End Sub
protected override void OnStart(string[] args) { eventLog1.WriteEntry("In OnStart"); }
Nota
Poiché le applicazioni di servizio sono progettate per un'esecuzione di lunga durata, generalmente eseguono operazioni di polling o di monitoraggio nel sistema. Il monitoraggio viene impostato nel metodo OnStart. Il metodo OnStart, tuttavia, non esegue effettivamente il monitoraggio. Il metodo OnStart deve rispondere al sistema operativo dopo l'avvio del servizio, poiché non può scorrere in ciclo all'infinito o bloccarsi. Per impostare un semplice meccanismo di polling, è possibile utilizzare il componente System.Timers.Timer. Nel metodo OnStart è necessario impostare parametri del componente e la proprietà Enabled su true. Il timer deve generare quindi degli eventi nel codice periodicamente e, a quel punto, il servizio può svolgere la propria funzione di monitoraggio.
Per definire quello che accade quando il servizio viene interrotto
Nell'editor di codice selezionare la routine OnStop dall'elenco a discesa Nome metodo. L'override di tale routine è stato eseguito automaticamente al momento della creazione del progetto. Scrivere il codice per determinare le azioni relative all'interruzione del servizio:
Protected Overrides Sub OnStop() EventLog1.WriteEntry("In OnStop.") End Sub
protected override void OnStop() { eventLog1.WriteEntry("In onStop."); }
È inoltre possibile eseguire l'override dei metodi OnPause, OnContinue e OnShutdown per definire ulteriori operazioni di elaborazione del componente.
Per definire altre azioni del servizio
Per il metodo che si desidera gestire, eseguire l'override del metodo appropriato e definire gli effetti desiderati.
Il codice che segue indica l'effetto dell'override del metodo OnContinue:
Protected Overrides Sub OnContinue() EventLog1.WriteEntry("In OnContinue.") End Sub
protected override void OnContinue() { eventLog1.WriteEntry("In OnContinue."); }
Durante l'installazione di un servizio Windows, è necessario eseguire alcune azioni personalizzate mediante la classe Installer. Visual Studio può creare questi programmi di installazione specificamente per un servizio Windows e aggiungerli al progetto.
Per creare i programmi di installazione per il servizio
In Esplora soluzioni fare clic con il pulsante destro del mouse su Service1.vb o Service1.cs, quindi scegliere Visualizza finestra di progettazione.
Fare clic sullo sfondo della finestra di progettazione per selezionare il servizio anziché il suo contenuto.
Nella finestra di progettazione fare clic con il pulsante destro del mouse e scegliere Aggiungi programma di installazione.
Per impostazione predefinita, al progetto viene aggiunta la classe di componente contenente due programmi di installazione. Il componente è denominato ProjectInstaller e i programmi di installazione in esso contenuti sono rispettivamente quello del servizio e quello del processo associato al servizio.
In visualizzazione Progettazione di ProjectInstaller fare clic su ServiceInstaller1 o serviceInstaller1.
Nella finestra Proprietà verificare che la proprietà ServiceName sia impostata su MyNewService.
Nella finestra di progettazione fare clic su ServiceProcessInstaller1 (in caso di progetto Visual Basic) o su serviceProcessInstaller1 (in caso di progetto Visual C#). Impostare la proprietà Account su LocalSystem. In questo modo il servizio verrà installato ed eseguito su un account del servizio locale.
Nota sulla sicurezza L'account LocalSystem dispone di ampie autorizzazioni, tra cui la possibilità di scrivere nel log eventi. Utilizzare questo account con attenzione, perché potrebbe aumentare il rischio di attacchi da parte di software dannoso. Per altre attività, è opportuno utilizzare l'account LocalService che opera come utente senza privilegi nel computer locale e presenta credenziali anonime a tutti i server remoti.
Per compilare il progetto di servizio
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Proprietà. Verrà visualizzata la finestra Progettazione proprietà relativa al progetto.
Nella pagina Applicazione selezionare MyNewService dall'elenco Oggetto di avvio.
Premere CTRL+MAIUSC+B per compilare il progetto.
Una volta compilato, il progetto può essere distribuito. Mediante un progetto di installazione verranno installati i file di progetto compilati e verranno eseguiti i programmi di installazione necessari per l'esecuzione del servizio Windows. Per creare un progetto di installazione completo, è necessario aggiungere l'output del progetto, MyNewService.exe, al progetto di installazione, quindi aggiungere un'azione personalizzata per far sì che MyNewService.exe venga installato. Per ulteriori informazioni sui progetti di installazione, vedere Progetti di installazione e distribuzione. Per ulteriori informazioni sulle azioni personalizzate, vedere Procedura dettagliata: creazione di un'azione personalizzata.
Per creare un progetto di installazione per il servizio
In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione, selezionare Aggiungi, quindi fare clic su Nuovo progetto.
In Modelli installati espandere il nodo Altri tipi di progetto, quindi espandere Installazione e distribuzione.
Selezionare Programma di installazione di Visual Studio.
Nel riquadro Modelli selezionare Progetto di installazione. Assegnare al progetto il nome MyServiceSetup. Scegliere OK.
Un progetto di installazione verrà aggiunto alla soluzione.
Successivamente, all'installazione verrà aggiunto l'output del progetto di servizio Windows, ossia MyNewService.exe.
Per aggiungere MyNewService.exe al progetto di installazione
In Esplora soluzioni fare clic con il pulsante destro del mouse su MyServiceSetup, scegliere Aggiungi, quindi Output progetto.
Verrà visualizzata la finestra di dialogo Aggiungi gruppo output progetto.
MyNewService è selezionato nella casella Progetto.
Selezionare Output primario dall'elenco, quindi scegliere OK.
Un elemento del progetto relativo all'output primario di MyNewService verrà aggiunto al progetto di installazione.
Aggiungere ora un'azione personalizzata per installare il file MyNewService.exe.
Per aggiungere un'azione personalizzata al progetto di installazione
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di installazione, scegliere Visualizza, quindi Azioni personalizzate.
Verrà visualizzato l'editor Azioni personalizzate.
Nell'editor Azioni personalizzate fare clic con il pulsante destro del mouse sul nodo Azioni personalizzate, quindi scegliere Aggiungi azione personalizzata.
Verrà visualizzata la finestra di dialogo Seleziona elemento nel progetto.
Nell'elenco fare doppio clic su Cartella applicazione per aprirla, selezionare Output primario da MyNewService (Attivo), quindi scegliere OK.
L'output primario verrà aggiunto a tutti i quattro nodi relativi alle azioni personalizzate, ossia Installa, Esegui commit, Esegui rollback e Disinstalla.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto MyServiceSetup, quindi scegliere Compila.
Per installare il servizio Windows
Per installare MyNewService.exe, fare clic con il pulsante destro del mouse sul progetto di installazione in Esplora soluzioni, quindi scegliere Installa.
Seguire le istruzioni fornite nell'Installazione guidata. Compilare e salvare la soluzione.
Per avviare e interrompere il servizio
Per aprire Gestione controllo servizi in Windows 7, Windows Vista e Windows Server, fare clic con il pulsante destro del mouse su Computer nel menu Start, quindi fare clic su Gestisci. Nella console Gestione computer espandere il nodo Servizi e applicazioni nel riquadro sinistro. Fare clic su Servizi.
Nella sezione Servizi della finestra viene visualizzato MyNewService.
Fare clic con il pulsante destro del mouse sul servizio dopo averlo selezionato dall'elenco, quindi scegliere Avvia.
Fare clic con il pulsante destro del mouse sul servizio, quindi scegliere Interrompi.
Per verificare l'output del log eventi del servizio
Aprire Esplora server e accedere al nodo Log eventi.
Nota
Il modello Servizio Windows e le relative funzionalità non sono disponibili nell'edizione Standard di Visual Studio.
Individuare l'elenco relativo a MyNewLog ed espanderlo. Saranno visualizzate le voci relative alle azioni eseguite dal servizio.
Per disinstallare il servizio
- Fare clic sul pulsante Start, scegliere Pannello di controllo, quindi Installazione applicazioni. Individuare il servizio, quindi scegliere Disinstalla.
Passaggi successivi
Per inviare comandi al servizio installato, è inoltre possibile utilizzare un componente ServiceController.
È possibile utilizzare il programma di installazione per creare un log eventi durante l'installazione dell'applicazione, anziché in fase di esecuzione. Il log eventi verrà inoltre eliminato dal programma di installazione durante la disinstallazione dell'applicazione.
Vedere anche
Attività
Procedura: aggiungere programmi di installazione all'applicazione di servizio
Procedura: installare e disinstallare servizi
Procedura: eseguire il debug di applicazioni di servizio per Windows
Riferimenti
Procedura: accedere e inizializzare Esplora server/Esplora database
Concetti
Introduzione alle applicazioni di servizio Windows