Introduzione alle applicazioni di servizio WindowsIntroduction to Windows Service Applications

I servizi Microsoft Windows, noti in precedenza come servizi NT, consentono di creare applicazioni eseguibili di lunga durata in esecuzione in sessioni Windows dedicate.Microsoft Windows services, formerly known as NT services, enable you to create long-running executable applications that run in their own Windows sessions. Questi servizi possono essere avviati automaticamente all'avvio del computer, possono essere sospesi e riavviati e non visualizzano alcuna interfaccia utente.These services can be automatically started when the computer boots, can be paused and restarted, and do not show any user interface. Queste funzionalità rendono i servizi ideali per l'uso in un server o per fornire funzionalità di lunga durata che non interferiscono con gli altri utenti che lavorano sullo stesso computer.These features make services ideal for use on a server or whenever you need long-running functionality that does not interfere with other users who are working on the same computer. È anche possibile eseguire i servizi nel contesto di sicurezza di un account utente specifico diverso dall'utente connesso o dall'account computer predefinito.You can also run services in the security context of a specific user account that is different from the logged-on user or the default computer account. Per altre informazioni sui servizi e le sessioni di Windows, vedere la documentazione di Windows SDK.For more information about services and Windows sessions, see the Windows SDK documentation.

È possibile creare facilmente servizi mediante la creazione di un'applicazione installata come servizio.You can easily create services by creating an application that is installed as a service. Si supponga, ad esempio, di voler monitorare i dati dei contatori delle prestazioni e reagire ai valori di soglia.For example, suppose you want to monitor performance counter data and react to threshold values. È possibile scrivere un'applicazione Servizio Windows che rimane in ascolto dei dati del contatore delle prestazioni, distribuisce l'applicazione e iniziare la raccolta e l'analisi dei dati.You could write a Windows Service application that listens to the performance counter data, deploy the application, and begin collecting and analyzing data.

Il servizio viene creato come progetto di Microsoft Visual Studio definendo il codice al suo interno che controlla i comandi che possono essere inviati al servizio e le azioni che devono essere eseguite alla ricezione di tali comandi.You create your service as a Microsoft Visual Studio project, defining code within it that controls what commands can be sent to the service and what actions should be taken when those commands are received. I comandi che possono essere inviati a un servizio includono avvio, sospensione, ripresa e arresto del servizio. Si possono anche creare comandi personalizzati.Commands that can be sent to a service include starting, pausing, resuming, and stopping the service; you can also execute custom commands.

Dopo aver creato e compilato l'applicazione, è possibile installarla eseguendo l'utilità della riga di comando InstallUtil.exe e passando il percorso al file eseguibile del servizio.After you create and build the application, you can install it by running the command-line utility InstallUtil.exe and passing the path to the service's executable file. È quindi possibile usare Gestione controllo servizi per avviare, arrestare, sospendere, riprendere e configurare il servizio.You can then use the Services Control Manager to start, stop, pause, resume, and configure your service. Si possono anche eseguire molte delle stesse attività nel nodo Servizi in Esplora server o tramite la classe ServiceController.You can also accomplish many of these same tasks in the Services node in Server Explorer or by using the ServiceController class.

Applicazioni di servizio a confronto con altre applicazioni di Visual StudioService Applications vs. Other Visual Studio Applications

Le applicazioni di servizio funzionano in modo diverso rispetto a molti altri tipi di progetto per vari aspetti:Service applications function differently from many other project types in several ways:

  • Il file eseguibile compilato creato da un progetto di applicazione di servizio deve essere installato nel server prima che il progetto possa funzionare in modo significativo.The compiled executable file that a service application project creates must be installed on the server before the project can function in a meaningful way. Non è possibile eseguire il debug o eseguire un'applicazione di servizio premendo F5 o F11. Non è possibile eseguire immediatamente un servizio o eseguirne il codice istruzione per istruzione.You cannot debug or run a service application by pressing F5 or F11; you cannot immediately run a service or step into its code. È invece necessario installare e avviare il servizio, quindi collegare un debugger al processo del servizio.Instead, you must install and start your service, and then attach a debugger to the service's process. Per altre informazioni, vedere Procedura: Eseguire il debug di applicazioni di servizio per Windows.For more information, see How to: Debug Windows Service Applications.

  • A differenza di alcuni tipi di progetti, è necessario creare i componenti di installazione per le applicazioni di servizio.Unlike some types of projects, you must create installation components for service applications. I componenti di installazione installano e registrano il servizio nel server e creano una voce per il servizio con Gestione controllo servizi di Windows.The installation components install and register the service on the server and create an entry for your service with the Windows Services Control Manager. Per altre informazioni, vedere Procedura: Aggiungere programmi di installazione all'applicazione di servizio.For more information, see How to: Add Installers to Your Service Application.

  • Il metodo Main per l'applicazione di servizio deve eseguire il comando Esegui per i servizi contenuti nel progetto.The Main method for your service application must issue the Run command for the services your project contains. Il metodo Run carica i servizi in Gestione controllo servizi nel server appropriato.The Run method loads the services into the Services Control Manager on the appropriate server. Se si usa il modello di progetto Servizio Windows, questo metodo viene creato automaticamente.If you use the Windows Services project template, this method is written for you automatically. Si noti che il caricamento di un servizio non equivale all'avvio del servizio.Note that loading a service is not the same thing as starting the service. Vedere "Ciclo di vita del servizio" di seguito per altre informazioni.See "Service Lifetime" below for more information.

  • Le applicazioni di servizio Windows vengono eseguite in un oggetto finestra diverso rispetto all'oggetto interattivo dell'utente connesso.Windows Service applications run in a different window station than the interactive station of the logged-on user. Un oggetto finestra è un oggetto sicuro che contiene gli Appunti, un set di atom globali e un gruppo di oggetti desktop.A window station is a secure object that contains a Clipboard, a set of global atoms, and a group of desktop objects. Dato che l'oggetto del servizio Windows non è interattivo, le finestre di dialogo generate da un'applicazione di servizio Windows non saranno visibili e potrebbero causare il blocco del programma.Because the station of the Windows service is not an interactive station, dialog boxes raised from within a Windows service application will not be seen and may cause your program to stop responding. Analogamente, i messaggi di errore devono essere registrati nel registro eventi di Windows anziché essere generati nell'interfaccia utente.Similarly, error messages should be logged in the Windows event log rather than raised in the user interface.

    Le classi del servizio Windows supportate da .NET Framework non supportano l'interazione con gli oggetti interattivi, ovvero l'utente connesso.The Windows service classes supported by the .NET Framework do not support interaction with interactive stations, that is, the logged-on user. Inoltre, .NET Framework non include classi che rappresentano oggetti e desktop.The .NET Framework also does not include classes that represent stations and desktops. Se il servizio Windows deve interagire con altri oggetti, sarà necessario accedere all'API di Windows non gestita.If your Windows service must interact with other stations, you will need to access the unmanaged Windows API. Per altre informazioni, vedere la documentazione di Windows SDK.For more information, see the Windows SDK documentation.

    L'interazione del servizio Windows con l'utente o altri oggetti deve essere progettata attentamente per includere scenari come l'assenza di un utente connesso o un utente con un set di oggetti desktop imprevisto.The interaction of the Windows service with the user or other stations must be carefully designed to include scenarios such as there being no logged on user, or the user having an unexpected set of desktop objects. In alcuni casi, potrebbe essere più opportuno scrivere un'applicazione Windows eseguita sotto il controllo dell'utente.In some cases, it may be more appropriate to write a Windows application that runs under the control of the user.

  • Le applicazioni di servizio Windows vengono eseguite all'interno di un contesto di sicurezza proprio e avviate prima che l'utente acceda al computer Windows in cui sono installate.Windows service applications run in their own security context and are started before the user logs into the Windows computer on which they are installed. È necessario pianificare attentamente l'account utente nell'ambito del quale eseguire il servizio. Un servizio in esecuzione con l'account di sistema ha più autorizzazioni e privilegi rispetto al contesto di un account utente.You should plan carefully what user account to run the service within; a service running under the system account has more permissions and privileges than a user account.

Ciclo di vita del servizioService Lifetime

Un servizio passa attraverso diversi stati interni durante il ciclo di vita.A service goes through several internal states in its lifetime. In primo luogo, il servizio viene installato nel sistema in cui verrà eseguito.First, the service is installed onto the system on which it will run. Questo processo esegue i programmi di installazione per il progetto di servizio e carica il servizio in Gestione controllo servizi per tale computer.This process executes the installers for the service project and loads the service into the Services Control Manager for that computer. Gestione controllo servizi è l'utilità centrale fornita da Windows per amministrare i servizi.The Services Control Manager is the central utility provided by Windows to administer services.

Dopo il caricamento, il servizio deve essere avviato.After the service has been loaded, it must be started. L'avvio del servizio ne consente il funzionamento.Starting the service allows it to begin functioning. È possibile avviare un servizio da Gestione controllo servizi, da Esplora server o dal codice chiamando il metodo Start.You can start a service from the Services Control Manager, from Server Explorer, or from code by calling the Start method. Il metodo Start passa l'elaborazione al metodo OnStart dell'applicazione ed elabora qualsiasi codice definito in tale metodo.The Start method passes processing to the application's OnStart method and processes any code you have defined there.

Un servizio in esecuzione può rimanere in questo stato per un periodo illimitato fino a quando non viene arrestato o sospeso o fino alla chiusura del computer.A running service can exist in this state indefinitely until it is either stopped or paused or until the computer shuts down. Un servizio può esistere in uno di tre stati di base: Running, Paused o Stopped.A service can exist in one of three basic states: Running, Paused, or Stopped. Il servizio può anche segnalare lo stato di un comando in sospeso: ContinuePending, PausePending, StartPending o StopPending.The service can also report the state of a pending command: ContinuePending, PausePending, StartPending, or StopPending. Questi stati indicano che è stato inviato un comando, ad esempio un comando per sospendere un servizio in esecuzione, ma che il comando non è ancora stato eseguito.These statuses indicate that a command has been issued, such as a command to pause a running service, but has not been carried out yet. È possibile eseguire una query su Status per determinare lo stato di un servizio oppure usare WaitForStatus per eseguire un'azione quando si verifica uno di questi stati.You can query the Status to determine what state a service is in, or use the WaitForStatus to carry out an action when any of these states occurs.

È possibile sospendere, arrestare o riprendere un servizio da Gestione controllo servizi, da Esplora server oppure chiamando metodi nel codice.You can pause, stop, or resume a service from the Services Control Manager, from Server Explorer, or by calling methods in code. Ognuna di queste azioni può chiamare una routine associata nel servizio (OnStop, OnPause o OnContinue), in cui è possibile definire un'ulteriore elaborazione da eseguire quando il servizio cambia stato.Each of these actions can call an associated procedure in the service (OnStop, OnPause, or OnContinue), in which you can define additional processing to be performed when the service changes state.

Tipi di serviziTypes of Services

Esistono due tipi di servizi che è possibile creare in Visual Studio con .NET Framework.There are two types of services you can create in Visual Studio using the .NET Framework. Ai servizi che sono l'unico servizio in un processo viene assegnato il tipo Win32OwnProcess.Services that are the only service in a process are assigned the type Win32OwnProcess. Ai servizi che condividono un processo con un altro servizio viene assegnato il tipo Win32ShareProcess.Services that share a process with another service are assigned the type Win32ShareProcess. È possibile recuperare il tipo di servizio eseguendo una query sulla proprietà ServiceType.You can retrieve the service type by querying the ServiceType property.

Se si eseguono query su servizi esistenti che non sono stati creati in Visual Studio, è possibile riscontrare altri tipi di servizio.You might occasionally see other service types if you query existing services that were not created in Visual Studio. Per altre informazioni in merito, vedere ServiceType.For more information on these, see the ServiceType.

Servizi e componente ServiceControllerServices and the ServiceController Component

Il componente ServiceController viene usato per connettersi a un servizio installato e per modificarne lo stato. Con un componente ServiceController è possibile avviare e arrestare un servizio, sospendere e riprenderne l'esecuzione e inviare comandi personalizzati a un servizio.The ServiceController component is used to connect to an installed service and manipulate its state; using a ServiceController component, you can start and stop a service, pause and continue its functioning, and send custom commands to a service. Tuttavia, non è necessario usare un componente ServiceController quando si crea un'applicazione di servizio.However, you do not need to use a ServiceController component when you create a service application. In effetti, nella maggior parte dei casi il componente ServiceController deve esistere in un'applicazione distinta dall'applicazione di servizio Windows che definisce il servizio.In fact, in most cases your ServiceController component should exist in a separate application from the Windows service application that defines your service.

Per altre informazioni, vedere ServiceController.For more information, see ServiceController.

RequisitiRequirements

  • I servizi devono essere creati in un progetto di applicazione Servizio Windows o in un altro progetto abilitato per .NET Framework, che viene compilato come file EXE ed eredita dalla classe ServiceBase.Services must be created in a Windows Service application project or another .NET Framework–enabled project that creates an .exe file when built and inherits from the ServiceBase class.

  • I progetti contenenti servizi Windows devono avere componenti di installazione per il progetto e i relativi servizi.Projects containing Windows services must have installation components for the project and its services. È possibile ottenere facilmente questo risultato dalla finestra Proprietà.This can be easily accomplished from the Properties window. Per altre informazioni, vedere Procedura: Aggiungere programmi di installazione all'applicazione di servizio.For more information, see How to: Add Installers to Your Service Application.

Vedere ancheSee Also

Applicazioni di servizi WindowsWindows Service Applications
Architettura di programmazione delle applicazioni di servizioService Application Programming Architecture
Procedura: creare servizi WindowsHow to: Create Windows Services
Procedura: installare e disinstallare serviziHow to: Install and Uninstall Services
Procedura: avviare serviziHow to: Start Services
Procedura: eseguire il debug di applicazioni di servizio per WindowsHow to: Debug Windows Service Applications
Procedura dettagliata: creazione di un'applicazione di servizio Windows in Progettazione componentiWalkthrough: Creating a Windows Service Application in the Component Designer
Procedura: aggiungere programmi di installazione all'applicazione di servizioHow to: Add Installers to Your Service Application