Condividi tramite


Introduzione alle applicazioni di servizio Windows

Annotazioni

Questo articolo non si applica ai servizi ospitati in .NET. Per il contenuto più recente nei servizi Windows che usano Microsoft.Extensions.Hosting.BackgroundService e il modello di servizio di lavoro, vedere:

I servizi di Microsoft Windows, in precedenza noti come servizi NT, consentono di creare applicazioni eseguibili a esecuzione prolungata che vengono eseguite nelle proprie sessioni di Windows. Questi servizi possono essere avviati automaticamente all'avvio del computer, possono essere sospesi e riavviati e non mostrano alcuna interfaccia utente. Queste funzionalità rendono i servizi ideali per l'uso in un server o ogni volta che è necessaria una funzionalità a esecuzione prolungata che non interferisce con altri utenti che lavorano sullo stesso computer. È anche possibile eseguire servizi nel contesto di sicurezza di un account utente specifico diverso dall'utente connesso o dall'account computer predefinito. Per altre informazioni sui servizi e le sessioni di Windows, vedere la documentazione di Windows SDK.

È possibile creare facilmente i servizi creando un'applicazione installata come servizio. Si supponga, ad esempio, di voler monitorare i dati dei contatori delle prestazioni e reagire ai valori soglia. È possibile scrivere un'applicazione del servizio Windows in ascolto dei dati del contatore delle prestazioni, distribuire l'applicazione e iniziare a raccogliere e analizzare i dati.

Il servizio viene creato come progetto di Microsoft Visual Studio, definendo il codice all'interno di esso che controlla quali comandi possono essere inviati al servizio e quali azioni devono essere eseguite quando vengono ricevuti tali comandi. I comandi che possono essere inviati a un servizio includono l'avvio, la sospensione, la ripresa e l'arresto del servizio; è anche possibile eseguire comandi personalizzati.

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. È quindi possibile usare Gestione controllo servizi per avviare, arrestare, sospendere, riprendere e configurare il servizio. È anche possibile eseguire molte di queste stesse attività nel nodo Servizi in Esplora server o usando la ServiceController classe .

Applicazioni di servizio e altre applicazioni di Visual Studio

Le applicazioni di servizio funzionano in modo diverso da molti altri tipi di progetto in diversi modi:

  • 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. Non è possibile eseguire il debug o l'esecuzione di un'applicazione di servizio premendo F5 o F11; non è possibile eseguire immediatamente un servizio o eseguirne l'istruzione nel codice. È invece necessario installare e avviare il servizio e quindi collegare un debugger al processo del servizio. Per altre informazioni, vedere Procedura: Eseguire il debug di applicazioni di servizio Windows.

  • A differenza di alcuni tipi di progetti, è necessario creare componenti di installazione per le applicazioni di servizio. I componenti di installazione installano e registrano il servizio sul server e creano una voce per il servizio con il Gestore controllo servizi di Windows. Per altre informazioni, vedere Procedura: Aggiungere programmi di installazione all'applicazione di servizio.

  • Il Main metodo per l'applicazione di servizio deve eseguire il comando Run per i servizi contenuti nel progetto. Il Run metodo carica i servizi in Gestione controllo servizi nel server appropriato. Se si usa il modello di progetto Servizi Windows , questo metodo viene scritto automaticamente. Si noti che il caricamento di un servizio non equivale all'avvio del servizio. Per altre informazioni, vedere "Durata del servizio" di seguito.

  • Le applicazioni del servizio Windows vengono eseguite in una stazione finestra diversa dalla stazione interattiva dell'utente connesso. Una stazione di finestre è un oggetto sicuro che contiene il Clipboard, un insieme di atomi globali e un insieme di oggetti desktop. Poiché la stazione del servizio Windows non è una stazione interattiva, le finestre di dialogo generate dall'interno di un'applicazione di servizio Windows non verranno visualizzate e potrebbero causare l'arresto del programma. Analogamente, i messaggi di errore devono essere registrati nel registro eventi di Windows anziché generati nell'interfaccia utente.

    Le classi di servizio di Windows supportate da .NET Framework non supportano l'interazione con le stazioni interattive, ovvero l'utente connesso. .NET Framework non include anche classi che rappresentano stazioni e desktop. Se il servizio Windows deve interagire con altre stazioni, sarà necessario accedere all'API Windows non gestita. Per altre informazioni, vedere la documentazione di Windows SDK.

    L'interazione del servizio Windows con l'utente o altre stazioni deve essere progettata attentamente per includere scenari come l'assenza di utenti connessi o l'utente con un set imprevisto di oggetti desktop. In alcuni casi, potrebbe essere più appropriato scrivere un'applicazione Windows eseguita sotto il controllo dell'utente.

  • Le applicazioni di servizio Windows vengono eseguite nel proprio contesto di sicurezza e vengono avviate prima che l'utente acceda al computer Windows in cui sono installate. È necessario pianificare attentamente l'account utente in cui eseguire il servizio; un servizio in esecuzione con l'account di sistema dispone di più autorizzazioni e privilegi rispetto a un account utente.

Durata del servizio

Un servizio passa attraverso diversi stati interni nella sua durata. In primo luogo, il servizio viene installato nel sistema in cui verrà eseguito. Questo processo esegue i programmi di installazione per il progetto di servizio e carica il servizio in Gestione controllo servizi per tale computer. Il Servizi Control Manager è l'utilità centrale fornita da Windows per amministrare i servizi.

Dopo il caricamento del servizio, è necessario avviarlo. L'avvio del servizio consente di iniziare a funzionare. È possibile avviare un servizio da Gestione controllo servizi, da Esplora server o dal codice chiamando il Start metodo . Il Start metodo passa l'elaborazione al metodo dell'applicazione OnStart ed elabora qualsiasi codice definito in questa posizione.

Un servizio in esecuzione può esistere in questo stato per un periodo illimitato fino a quando non viene arrestato o sospeso o fino all'arresto del computer. Un servizio può esistere in uno dei tre stati di base: Running, Pausedo Stopped. Il servizio può anche segnalare lo stato di un comando in sospeso: ContinuePending, PausePending, StartPendingo StopPending. Questi stati indicano che è stato eseguito un comando, ad esempio un comando per sospendere un servizio in esecuzione, ma non è ancora stato eseguito. È possibile eseguire una query su Status per determinare lo stato in cui si trova un servizio oppure usare WaitForStatus per eseguire un'azione quando si verifica uno di questi stati.

È possibile sospendere, arrestare o riprendere un servizio da Gestione controllo servizi, da Esplora server o chiamando metodi nel codice. Ognuna di queste azioni può chiamare una routine associata nel servizio (OnStop, OnPauseo OnContinue), in cui è possibile definire un'elaborazione aggiuntiva da eseguire quando lo stato del servizio cambia.

Tipi di servizi

Esistono due tipi di servizi che è possibile creare in Visual Studio usando .NET Framework. Ai servizi che sono l'unico servizio in un processo viene assegnato il tipo Win32OwnProcess. Ai servizi che condividono un processo con un altro servizio viene assegnato il tipo Win32ShareProcess. È possibile recuperare il tipo di servizio eseguendo una query sulla ServiceType proprietà .

È possibile visualizzare occasionalmente altri tipi di servizio se si eseguono query sui servizi esistenti che non sono stati creati in Visual Studio. Per ulteriori informazioni su questi, vedere ServiceType.

Servizi e componente ServiceController

Il ServiceController componente viene usato per connettersi a un servizio installato e modificarne lo stato. Usando un ServiceController componente, è possibile avviare e arrestare un servizio, sospendere e continuare il funzionamento e inviare comandi personalizzati a un servizio. Tuttavia, non è necessario usare un ServiceController componente quando si crea un'applicazione di servizio. Nella maggior parte dei casi, infatti, il ServiceController componente deve esistere in un'applicazione separata dall'applicazione del servizio Windows che definisce il servizio.

Per altre informazioni, vedere ServiceController.

Requisiti

  • I servizi devono essere creati in un progetto di applicazione di servizio Windows o in un altro progetto abilitato per .NET Framework che crea un file .exe quando viene compilato ed eredita dalla ServiceBase classe .

  • I progetti contenenti servizi Windows devono avere componenti di installazione per il progetto e i relativi servizi. Questa operazione può essere eseguita facilmente dalla finestra Proprietà . Per altre informazioni, vedere Procedura: Aggiungere programmi di installazione all'applicazione di servizio.

Vedere anche