ServiceBase Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce una classe base per un servizio che esisterà nel contesto di un'applicazione di servizio. È necessario derivare ServiceBase durante la creazione di una nuova classe di servizio.
public ref class ServiceBase : System::ComponentModel::Component
public class ServiceBase : System.ComponentModel.Component
type ServiceBase = class
inherit Component
Public Class ServiceBase
Inherits Component
- Ereditarietà
- Derivato
Commenti
Derivare da ServiceBase quando si definisce la classe di servizio in un'applicazione di servizio. Qualsiasi servizio utile esegue l'override dei OnStart metodi e OnStop . Per altre funzionalità, è possibile eseguire l'override OnPause e OnContinue con un comportamento specifico in risposta alle modifiche nello stato del servizio.
Un servizio è un eseguibile a esecuzione prolungata che non supporta un'interfaccia utente e che potrebbe non essere eseguito con l'account utente connesso. Il servizio può essere eseguito senza che alcun utente sia connesso al computer.
Per impostazione predefinita, i servizi vengono eseguiti con l'account di sistema, che non corrisponde all'account amministratore. Non è possibile modificare i diritti dell'account di sistema. In alternativa, è possibile usare un ServiceProcessInstaller oggetto per specificare un account utente in cui verrà eseguito il servizio.
Un eseguibile può contenere più di un servizio, ma deve contenere un separato ServiceInstaller per ogni servizio. L'istanza ServiceInstaller registra il servizio con il sistema. Il programma di installazione associa inoltre ogni servizio a un registro eventi che è possibile usare per registrare i comandi del servizio. La main()
funzione nell'eseguibile definisce i servizi da eseguire. La directory di lavoro corrente del servizio è la directory di sistema, non la directory in cui si trova l'eseguibile.
Quando si avvia un servizio, il sistema individua l'eseguibile ed esegue il OnStart metodo per tale servizio, contenuto nell'eseguibile. Tuttavia, l'esecuzione del servizio non equivale all'esecuzione del file eseguibile. L'eseguibile carica solo il servizio. L'accesso al servizio, ad esempio avviato e arrestato, viene eseguito tramite Service Control Manager.
L'eseguibile chiama il ServiceBase costruttore della classe derivata la prima volta che si chiama Start nel servizio. Il OnStart metodo di gestione dei comandi viene chiamato immediatamente dopo l'esecuzione del costruttore. Il costruttore non viene eseguito di nuovo dopo la prima volta che il servizio è stato caricato, pertanto è necessario separare l'elaborazione eseguita dal costruttore da quella eseguita da OnStart. Tutte le risorse che possono essere rilasciate da OnStop devono essere create in OnStart. La creazione di risorse nel costruttore impedisce che vengano create correttamente se il servizio viene avviato nuovamente dopo OnStop il rilascio delle risorse.
Service Control Manager (SCM) consente di interagire con il servizio. È possibile usare SCM per passare i comandi Start, Stop, Pause, Continue o custom nel servizio. SCM usa i valori di CanStop e CanPauseAndContinue per determinare se il servizio accetta i comandi Stop, Pause o Continue. Stop, Pause e Continue sono abilitati nei menu di scelta rapida di SCM solo se la proprietà CanStop corrispondente o CanPauseAndContinue si trova true
nella classe del servizio. Se abilitato, il comando viene passato al servizio e OnStop, OnPauseo OnContinue viene chiamato . Se CanStop, CanShutdowno CanPauseAndContinue è false
, il metodo di gestione dei comandi corrispondente (ad esempio OnStop) non verrà elaborato, anche se è stato implementato il metodo .
È possibile usare la ServiceController classe per eseguire a livello di codice le operazioni eseguite da SCM usando un'interfaccia utente. È possibile automatizzare le attività disponibili nella console. Se CanStop, CanShutdowno CanPauseAndContinue è ma non è true
stato implementato un metodo di gestione dei comandi corrispondente ,ad esempio OnStop, il sistema genera un'eccezione e ignora il comando .
Non è necessario implementare OnStart, OnStopo qualsiasi altro metodo in ServiceBase. Tuttavia, il comportamento del servizio è descritto in OnStart, quindi almeno questo membro deve essere sottoposto a override. La main()
funzione dell'eseguibile registra il servizio nell'eseguibile con Service Control Manager chiamando il Run metodo . La ServiceName proprietà dell'oggetto ServiceBase passato al metodo deve corrispondere alla RunServiceName proprietà del programma di installazione del servizio per tale servizio.
È possibile usare InstallUtil.exe
per installare i servizi nel sistema.
Nota
È possibile specificare un log diverso dal registro eventi dell'applicazione per ricevere la notifica delle chiamate al servizio, ma né la AutoLog proprietà né la EventLog proprietà possono scrivere in un log personalizzato. Impostare AutoLog su false
se non si vuole usare la registrazione automatica.
Costruttori
ServiceBase() |
Crea una nuova istanza della classe ServiceBase. |
Campi
MaxNameLength |
Indica la dimensione massima per il nome di un servizio. |
Proprietà
AutoLog |
Indica se registrare i comandi di avvio, interruzione, sospensione e continuazione nel log eventi. |
CanHandlePowerEvent |
Ottiene o imposta un valore che indica se il servizio può gestire le notifiche relative alle variazioni di stato dell'alimentazione del computer. |
CanHandleSessionChangeEvent |
Ottiene o imposta il valore che indica se il servizio è in grado di gestire gli eventi di modifica di sessione ricevuti dalla sessione Terminal Server. |
CanPauseAndContinue |
Ottiene o imposta un valore che indica se il servizio può essere sospeso e riattivato. |
CanRaiseEvents |
Ottiene un valore che indica se il componente può generare un evento. (Ereditato da Component) |
CanShutdown |
Ottiene o imposta un valore che indica se è necessario che il servizio riceva una notifica quando il sistema è in fase di chiusura. |
CanStop |
Ottiene o imposta un valore che indica se il servizio, una volta avviato, può essere interrotto. |
Container |
Ottiene l'oggetto IContainer che contiene Component. (Ereditato da Component) |
DesignMode |
Ottiene un valore che indica se il Component si trova in modalità progettazione. (Ereditato da Component) |
EventLog |
Ottiene un log eventi da utilizzare per scrivere nel log eventi delle applicazioni le notifiche delle chiamate ai comandi di servizio, come Start e Stop. |
Events |
Ottiene l'elenco dei gestori eventi allegati a questo Component. (Ereditato da Component) |
ExitCode |
Ottiene o imposta il codice di uscita del servizio. |
ServiceHandle |
Ottiene l'handle del controllo di servizio. |
ServiceName |
Ottiene o imposta il nome breve utilizzato per identificare il servizio nel sistema. |
Site |
Ottiene o imposta l'oggetto ISite di Component. (Ereditato da Component) |
Metodi
CreateObjRef(Type) |
Consente di creare un oggetto che contiene tutte le informazioni rilevanti necessarie per la generazione del proxy utilizzato per effettuare la comunicazione con un oggetto remoto. (Ereditato da MarshalByRefObject) |
Dispose() |
Rilascia tutte le risorse usate da Component. (Ereditato da Component) |
Dispose(Boolean) |
Elimina le risorse, diverse dalla memoria, usate dall'oggetto ServiceBase. |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetLifetimeService() |
Obsoleti.
Consente di recuperare l'oggetto servizio di durata corrente per controllare i criteri di durata per l'istanza. (Ereditato da MarshalByRefObject) |
GetService(Type) |
Consente di restituire un oggetto che rappresenta un servizio fornito da Component o dal relativo Container. (Ereditato da Component) |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
InitializeLifetimeService() |
Obsoleti.
Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza. (Ereditato da MarshalByRefObject) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
MemberwiseClone(Boolean) |
Crea una copia dei riferimenti dell'oggetto MarshalByRefObject corrente. (Ereditato da MarshalByRefObject) |
OnContinue() |
Quando viene eseguita l'implementazione in una classe derivata, l'esecuzione di OnContinue() avviene quando Gestione controllo servizi invia al servizio un comando Continue. Specifica le azioni da intraprendere quando un servizio riprende il normale funzionamento dopo essere stato sospeso. |
OnCustomCommand(Int32) |
Quando viene eseguita l'implementazione in una classe derivata, l'esecuzione di OnCustomCommand(Int32) avviene quando Gestione controllo servizi passa al servizio un comando personalizzato. Specifica le azioni da intraprendere quando ricorre un comando con il parametro specificato. |
OnPause() |
Quando viene eseguita l'implementazione in una classe derivata, l'esecuzione avviene quando Gestione controllo servizi invia un comando Pause al servizio. Specifica le azioni da intraprendere quando un servizio viene sospeso. |
OnPowerEvent(PowerBroadcastStatus) |
Quando viene eseguita l'implementazione in una classe derivata, l'esecuzione avviene al variare dello stato di alimentazione dei computer laptop che entrano in modalità sospesa, una condizione che non corrisponde alla chiusura del sistema. |
OnSessionChange(SessionChangeDescription) |
Viene eseguito alla ricezione di un evento di modifica da una sessione Terminal Server. |
OnShutdown() |
Quando viene eseguita l'implementazione in una classe derivata, l'esecuzione avviene alla chiusura del sistema. Specifica quali operazioni devono essere eseguite subito prima della chiusura del sistema. |
OnStart(String[]) |
Quando viene eseguita l'implementazione in una classe derivata, l'esecuzione avviene quando Gestione controllo servizi invia un comando Pause al servizio o quando viene avviato il sistema (nel caso di un servizio ad avvio automatico). Specifica le azioni da intraprendere all'avvio del servizio. |
OnStop() |
Quando viene eseguita l'implementazione in una classe derivata, l'esecuzione avviene quando il gestore SCM invia un comando Stop al servizio. Specifica le azioni da intraprendere al termine dell'esecuzione del servizio. |
RequestAdditionalTime(Int32) |
Consente di richiedere tempo aggiuntivo per un'operazione in attesa. |
RequestAdditionalTime(TimeSpan) |
Quando questo metodo viene chiamato da OnStart, OnStop, OnPause o OnContinue, l'hint di attesa specificato viene passato a Service Control Manager per evitare che il servizio sia contrassegnato come non risponde. |
Run(ServiceBase) |
Registra il file eseguibile relativo a servizio con il gestore SCM. |
Run(ServiceBase[]) |
Registra il file eseguibile relativo a più servizi con il gestore SCM. |
ServiceMainCallback(Int32, IntPtr) |
Consente di registrare il gestore comando e di avviare il servizio. |
Stop() |
Arresta il servizio in esecuzione. |
ToString() |
Restituisce un oggetto String che contiene il nome dell'eventuale oggetto Component. Questo metodo non deve essere sottoposto a override. (Ereditato da Component) |
Eventi
Disposed |
Si verifica quando il componente viene eliminato da una chiamata al metodo Dispose(). (Ereditato da Component) |