Condividi tramite


Procedura dettagliata: creazione di un'applicazione di servizio per Windows nella finestra Progettazione componenti

Aggiornamento: novembre 2007

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.

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

  1. Scegliere Nuovo progetto dal menu File.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  2. Selezionare il progetto Servizio Windows dall'elenco dei modelli di progetto di Visual Basic, Visual C#, Visual C++ o Visual J#, 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.

  3. Fare clic nella finestra di progettazione per selezionare Service1, quindi nella finestra Proprietà impostare ServiceName e la proprietà (Nome) relativa a Service1 su MyNewService.

  4. Impostare la proprietà AutoLog su true.

  5. Scegliere Codice dal menu Visualizza per aprire l'Editor di codice. Modificare il metodo Main per creare un'istanza di MyNewService. Quando il servizio è stato rinominato al passaggio 3, il nome della classe non è stato modificato nel metodo Main. Nelle applicazioni Visual C# e Visual J#, il metodo Main si trova rispettivamente nei file Program.cs e Program.js.

    ' To access the Main method in Visual Basic, select Main from the
    ' method name drop-down list. This expands the Component Designer 
    ' generated code region.
    Shared Sub Main()
      Dim ServicesToRun() As System.ServiceProcess.ServiceBase
      ' Change the following line to match.
      ServicesToRun = New System.ServiceProcess.ServiceBase() _
          {New MyNewService()}
      System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    End Sub
    
     static void Main()
        {
            System.ServiceProcess.ServiceBase[] ServicesToRun;
            // Change the following line to match.
            ServicesToRun = new System.ServiceProcess.ServiceBase[] 
              { new MyNewService() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }
    
        public static void main(String[] args)
        {
            System.ServiceProcess.ServiceBase[] ServicesToRun;
            ServicesToRun = new System.ServiceProcess.ServiceBase[] 
              { new MyNewService() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }
    

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 ulteriori informazioni sui log eventi personalizzati, vedere Procedura: creare e rimuovere log eventi personalizzati.

Per aggiungere la funzionalità del log eventi personalizzato al servizio

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su Service1.vb, Service1.cs o Service1.jsl, quindi scegliere Visualizza finestra di progettazione.

  2. Dalla scheda Componenti della Casella degli strumenti trascinare un componente EventLog nella finestra di progettazione.

  3. In Esplora soluzioni fare clic con il pulsante destro del mouse su Service1.vb, Service1.cs o Service1.jsl, quindi scegliere Visualizza codice.

  4. 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";
        }
    
        public MyNewService()
        {
            InitializeComponent();
            if (!System.Diagnostics.EventLog.SourceExists("MySource"))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                        "MySource", "MyNewLog");
            }
            eventLog1.set_Source("MySource");
            eventLog1.set_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");
        }
    
        protected 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.");
        }
    
        protected 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.");
        }  
    
        protected 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

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su Service1.vb, Service1.cs o Service1.jsl, quindi scegliere Visualizza finestra di progettazione.

  2. Fare clic sullo sfondo della finestra di progettazione per selezionare il servizio anziché il suo contenuto.

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

  4. In visualizzazione Progettazione di ProjectInstaller fare clic su ServiceInstaller1 o serviceInstaller1.

  5. Nella finestra Proprietà impostare la proprietà ServiceName su MyNewService.

  6. Impostare la proprietà StartType su Automatic.

  7. Nella finestra di progettazione fare clic su ServiceProcessInstaller1 (per un progetto Visual Basic) o su serviceProcessInstaller1 (per progetti Visual C# e Visual J#). Impostare la proprietà Account su LocalService. In questo modo il servizio verrà installato ed eseguito su un account del servizio locale.

    Nota sulla sicurezza:

    L'account LocalService opera come utente non privilegiato nel computer locale e presenta credenziali anonime a tutti i server remoti. Utilizzare gli altri account con cautela, poiché vengono eseguiti con privilegi maggiori ed espongono a un maggior rischio di attacchi da malware.

Per generare il progetto di servizio

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

  2. Nella pagina Applicazione selezionare MyNewService dall'elenco Oggetto di avvio.

  3. Premere CTRL+MAIUSC+B per generare il progetto.

Una volta generato, 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. Per ulteriori informazioni sulle azioni personalizzate, vedere Procedura dettagliata: creazione di un'azione personalizzata.

Per creare un progetto di installazione per il servizio

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione desiderata, scegliere Aggiungi, quindi Nuovo progetto.

  2. Nel riquadro Tipi progetto selezionare la cartella Progetti di installazione e distribuzione.

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

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

  2. MyNewService è selezionato nella casella Progetto.

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

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

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

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

  4. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto MyServiceSetup, quindi scegliere Genera.

Per installare il servizio Windows

  1. Per installare MyNewService.exe, fare clic con il pulsante destro del mouse sul progetto di installazione in Esplora soluzioni, quindi scegliere Installa.

  2. Seguire le istruzioni fornite nell'Installazione guidata. Generare e salvare la soluzione.

Per avviare e interrompere il servizio

  1. Aprire Gestione controllo servizi con una delle seguenti operazioni:

    • In Windows XP e 2000 Professional fare clic con il pulsante destro del mouse su Risorse del computer sul desktop, quindi scegliere Gestione. Nella console Gestione computer espandere il nodo Servizi e applicazioni.

      -oppure-

    • In Windows Server 2003 e Windows 2000 Server fare clic su Start, scegliere Programmi, Strumenti di amministrazione, quindi Servizi.

      Nota:

      In Windows NT versione 4.0 è possibile visualizzare questa finestra di dialogo dal Pannello di controllo.

    Nella sezione Servizi della finestra viene visualizzato MyNewService.

  2. Fare clic con il pulsante destro del mouse sul servizio dopo averlo selezionato dall'elenco, quindi scegliere Avvia.

  3. Fare clic con il pulsante destro del mouse sul servizio, quindi scegliere Interrompi.

Per verificare l'output del log eventi del servizio

  1. Aprire Esplora server e accedere al nodo Log eventi. Per ulteriori informazioni, vedere Procedura: utilizzare i log eventi in Esplora server.

    Nota:

    Il modello Servizio Windows e le relative funzionalità non sono disponibili nell'edizione Standard di Visual Studio.

  2. Individuare l'elenco relativo a MyNewLog ed espanderlo. Saranno visualizzate le voci relative alle azioni eseguite dal servizio.

Per disinstallare il servizio

  1. Fare clic sul pulsante Start, scegliere Pannello di controllo, quindi Installazione applicazioni. Individuare il servizio, quindi scegliere Disinstalla.

  2. Per disinstallare il programma, è inoltre possibile fare clic con il pulsante destro del mouse sull'icona del programma relativa al file MSI, quindi scegliere Disinstalla.

    Nota:

    Se il servizio è stato installato in Windows 2000, sarà necessario riavviare il sistema prima di reinstallarlo. In Windows 2000 i servizi non vengono completamente eliminati fino al riavvio del sistema.

Passaggi successivi

Per inviare comandi al servizio installato, è inoltre possibile utilizzare un componente ServiceController. Per ulteriori informazioni sull'utilizzo del componente ServiceController, vedere Monitoraggio di servizi Windows.

È 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. Per ulteriori informazioni, vedere Procedura dettagliata: installazione di un componente Event Log.

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

Procedura: avviare il Visualizzatore eventi da Esplora server

Concetti

Introduzione alle applicazioni di servizio Windows

Riferimenti

Procedura: accedere e inizializzare Esplora server/Esplora database

Altre risorse

Applicazioni di servizio Windows