ServiceInstaller esegue operazioni specifiche del servizio a cui è associato. Viene utilizzata dall'utilità di installazione per scrivere i valori del Registro di sistema associati al servizio in una sottochiave della chiave di registro HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Il servizio è identificato dal relativo ServiceName all'interno di questa sottochiave. La sottochiave contiene anche il nome dell'eseguibile o della DLL a cui appartiene il servizio.
Per installare un servizio, creare una classe di installazione progetti che eredita dalla classe Installer e impostare l'attributo RunInstallerAttribute della classe su true. All'interno del progetto creare un'istanza di ServiceProcessInstaller per ogni applicazione di servizio e un'istanza di ServiceInstaller per ogni servizio contenuto nell'applicazione. All'interno del costruttore della classe del programma di installazione dei progetti impostare le proprietà di installazione del servizio utilizzando le istanze di ServiceProcessInstaller e ServiceInstaller e aggiungendole all'insieme Installers.
Nota |
|---|
| Si consiglia di utilizzare il costruttore per l'aggiunta di istanze del programma di installazione. Se tuttavia è necessario aggiungere le istanze all'insieme Installers del metodo Install, assicurarsi di effettuare le stesse aggiunte nell'insieme del metodo Uninstall. |
Per tutte le classi che derivano dalla classe Installer, lo stato dell'insieme Installers deve corrispondere nei metodi Install e Uninstall. È tuttavia possibile evitare di mantenere lo stato dell'insieme nei metodi Install e Uninstall aggiungendo istanze del programma di installazione all'insieme Installers del costruttore della classe del programma di installazione. Quando viene chiamata l'utilità di installazione cerca l'attributo RunInstallerAttribute. Se l'attributo è true, verranno installati tutti i servizi precedentemente aggiunti all'insieme Installers e associati al programma di installazione del progetto. Se RunInstallerAttribute è false o non esiste, il programma di installazione del progetto verrà ignorato dall'utilità di installazione.
L'oggetto ServiceProcessInstaller associato alla classe di installazione del progetto installa le informazioni comuni a tutte le istanze di ServiceInstaller nel progetto. Se il servizio si distingue per qualche particolare dagli altri servizi nel progetto di installazione, tali informazioni vengono installate da questo metodo.
Nota |
|---|
| È fondamentale che la proprietà ServiceName sia identica alla proprietà ServiceBase.ServiceName della classe derivata da ServiceBase . In genere, il valore della proprietà ServiceBase.ServiceName del servizio viene impostata nella funzione Main() dell'eseguibile dell'applicazione del servizio. Gestione controllo servizi utilizza la proprietà ServiceInstaller.ServiceName per individuare il servizio all'interno dell'eseguibile. |
È possibile modificare altre proprietà nella classe ServiceInstaller prima o dopo averla aggiunta all'insieme Installers del programma di installazione del progetto. Ad esempio, la proprietà StartType di un servizio può essere impostata per l'avvio automatico del servizio al riavvio del sistema o per richiedere l'avvio manuale ad opera dell'utente.
Normalmente non vengono chiamati metodi su ServiceInstaller all'interno del codice, in quanto questi vengono chiamati solo dall'utilità di installazione. L'utilità di installazione chiama automaticamente i metodi ServiceProcessInstaller.Install e ServiceInstaller.Install durante il processo di installazione. Per il ripristino da eventuali errori, viene chiamato il metodo Rollback o ServiceInstaller.Rollback su tutti i componenti precedentemente installati.
L'utilità di installazione chiama il metodo Uninstall per rimuovere l'oggetto.
La routine di installazione di un'applicazione mantiene automaticamente le informazioni relative ai componenti già installati utilizzando la proprietà Installer.Context del programma di installazione del progetto. Queste informazioni sullo stato vengono costantemente aggiornate durante l'installazione dell'istanza di ServiceProcessInstaller e di ciascuna istanza di ServiceInstaller. In genere non è necessario che il codice modifichi le informazioni sullo stato in modo esplicito.
Al momento dell'esecuzione dell'installazione, viene creato automaticamente un oggetto EventLogInstaller per l'installazione dell'origine del log eventi associata alla classe derivata da ServiceBase. La proprietà Log per questa origine viene impostata dal costruttore ServiceInstaller sul log delle applicazioni del computer. Quando si imposta la proprietà ServiceName di ServiceInstaller (che è necessario che sia identica alla proprietà ServiceBase.ServiceName del servizio), Source viene impostata automaticamente sullo stesso valore. Se l'installazione non riesce, l'installazione dell'origine viene annullata insieme ai servizi precedentemente installati.
Il metodo Uninstall tenta di interrompere il servizio, se è in esecuzione. Indipendentemente dalla riuscita dell'operazione, Uninstall annulla le modifiche apportate da Install. Se è stata creata una nuova origine per la registrazione degli eventi, l'origine viene eliminata.