ServiceInstaller 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.
Installa una classe che si estende ServiceBase per implementare un servizio. Questa classe viene chiamata dall'utilità di installazione durante l'installazione di un'applicazione di servizio.
public ref class ServiceInstaller : System::Configuration::Install::ComponentInstaller
public class ServiceInstaller : System.Configuration.Install.ComponentInstaller
type ServiceInstaller = class
inherit ComponentInstaller
Public Class ServiceInstaller
Inherits ComponentInstaller
- Ereditarietà
Esempio
Nell'esempio seguente viene creato un programma di installazione del progetto denominato MyProjectInstaller, che eredita da Installer. Si presuppone che sia presente un eseguibile del servizio che contiene due servizi, "Hello-World Service 1" e "Hello-World Service 2". All'interno del costruttore per MyProjectInstaller (che verrebbe chiamato dall'utilità di installazione), ServiceInstaller gli oggetti vengono creati per ognuno di questi servizi e viene creato un ServiceProcessInstaller per l'eseguibile. Affinché l'utilità di installazione riconosca MyProjectInstaller come programma di installazione valido, l'attributo RunInstallerAttribute è impostato su true.
Le proprietà facoltative vengono impostate nel programma di installazione del processo e i programmi di installazione del servizio prima che i programmi di installazione vengano aggiunti alla Installers raccolta. Quando l'utilità di installazione accede MyProjectInstallera , gli oggetti aggiunti alla Installers raccolta tramite una chiamata a InstallerCollection.Add verranno installati a sua volta. Durante il processo, il programma di installazione mantiene le informazioni sullo stato che indicano quali oggetti sono stati installati, in modo che ognuno possa essere sottoposto a backup a sua volta, se si verifica un errore di installazione.
In genere, non si creerebbe un'istanza della classe del programma di installazione del progetto in modo esplicito. È necessario crearlo e aggiungere l'attributo alla sintassi, ma è l'utilità RunInstallerAttribute di installazione che chiama effettivamente e quindi crea un'istanza della classe .
#using <System.dll>
#using <System.ServiceProcess.dll>
#using <System.Configuration.Install.dll>
using namespace System;
using namespace System::Collections;
using namespace System::Configuration::Install;
using namespace System::ServiceProcess;
using namespace System::ComponentModel;
[RunInstaller(true)]
public ref class MyProjectInstaller : public Installer
{
private:
ServiceInstaller^ serviceInstaller1;
ServiceInstaller^ serviceInstaller2;
ServiceProcessInstaller^ processInstaller;
public:
MyProjectInstaller()
{
// Instantiate installers for process and services.
processInstaller = gcnew ServiceProcessInstaller;
serviceInstaller1 = gcnew ServiceInstaller;
serviceInstaller2 = gcnew ServiceInstaller;
// The services run under the system account.
processInstaller->Account = ServiceAccount::LocalSystem;
// The services are started manually.
serviceInstaller1->StartType = ServiceStartMode::Manual;
serviceInstaller2->StartType = ServiceStartMode::Manual;
// ServiceName must equal those on ServiceBase derived classes.
serviceInstaller1->ServiceName = "Hello-World Service 1";
serviceInstaller2->ServiceName = "Hello-World Service 2";
// Add installers to collection. Order is not important.
Installers->Add( serviceInstaller1 );
Installers->Add( serviceInstaller2 );
Installers->Add( processInstaller );
}
static void Main()
{
Console::WriteLine("Usage: InstallUtil.exe [<service>.exe]");
}
};
int main()
{
MyProjectInstaller::Main();
}
using System;
using System.Collections;
using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;
[RunInstaller(true)]
public class MyProjectInstaller : Installer
{
private ServiceInstaller serviceInstaller1;
private ServiceInstaller serviceInstaller2;
private ServiceProcessInstaller processInstaller;
public MyProjectInstaller()
{
// Instantiate installers for process and services.
processInstaller = new ServiceProcessInstaller();
serviceInstaller1 = new ServiceInstaller();
serviceInstaller2 = new ServiceInstaller();
// The services run under the system account.
processInstaller.Account = ServiceAccount.LocalSystem;
// The services are started manually.
serviceInstaller1.StartType = ServiceStartMode.Manual;
serviceInstaller2.StartType = ServiceStartMode.Manual;
// ServiceName must equal those on ServiceBase derived classes.
serviceInstaller1.ServiceName = "Hello-World Service 1";
serviceInstaller2.ServiceName = "Hello-World Service 2";
// Add installers to collection. Order is not important.
Installers.Add(serviceInstaller1);
Installers.Add(serviceInstaller2);
Installers.Add(processInstaller);
}
public static void Main()
{
Console.WriteLine("Usage: InstallUtil.exe [<service>.exe]");
}
}
Imports System.Collections
Imports System.Configuration.Install
Imports System.ServiceProcess
Imports System.ComponentModel
<RunInstallerAttribute(True)> _
Public Class MyProjectInstaller
Inherits Installer
Private serviceInstaller1 As ServiceInstaller
Private serviceInstaller2 As ServiceInstaller
Private processInstaller As ServiceProcessInstaller
Public Sub New()
' Instantiate installers for process and services.
processInstaller = New ServiceProcessInstaller()
serviceInstaller1 = New ServiceInstaller()
serviceInstaller2 = New ServiceInstaller()
' The services will run under the system account.
processInstaller.Account = ServiceAccount.LocalSystem
' The services will be started manually.
serviceInstaller1.StartType = ServiceStartMode.Manual
serviceInstaller2.StartType = ServiceStartMode.Manual
' ServiceName must equal those on ServiceBase derived classes.
serviceInstaller1.ServiceName = "Hello-World Service 1"
serviceInstaller2.ServiceName = "Hello-World Service 2"
' Add installers to collection. Order is not important.
Installers.Add(serviceInstaller1)
Installers.Add(serviceInstaller2)
Installers.Add(processInstaller)
End Sub
Public Shared Sub Main()
Console.WriteLine("Usage: InstallUtil.exe [<service>.exe]")
End Sub
End Class
Commenti
l'oggetto ServiceInstaller funziona in modo specifico per il servizio a cui è associato. Viene usato dall'utilità di installazione per scrivere i valori del Registro di sistema associati al servizio in una sottochiave all'interno della chiave del Registro di sistema HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Il servizio viene identificato dal nomeservizio all'interno di questa sottochiave. La sottochiave include anche il nome dell'eseguibile o del .dll a cui appartiene il servizio.
Per installare un servizio, creare una classe del programma di installazione del progetto che eredita dalla Installer classe e impostare l'attributo RunInstallerAttribute nella classe su true. All'interno del progetto creare un'istanza ServiceProcessInstaller per ogni applicazione di servizio e un'istanza ServiceInstaller per ogni servizio nell'applicazione. All'interno del costruttore della classe del programma di installazione del progetto impostare le proprietà di installazione per il servizio usando le ServiceProcessInstaller istanze e ServiceInstaller e aggiungere le istanze alla Installers raccolta.
Annotazioni
È consigliabile usare il costruttore per aggiungere istanze del programma di installazione; Tuttavia, se è necessario aggiungere alla Installers raccolta nel Install metodo , assicurarsi di eseguire le stesse aggiunte alla raccolta nel Uninstall metodo .
Per tutte le classi che derivano dalla Installer classe , lo stato della Installers raccolta deve essere lo stesso nei Install metodi e Uninstall . Tuttavia, è possibile evitare la manutenzione della raccolta tra i Install metodi e Uninstall se si aggiungono istanze del Installers programma di installazione alla raccolta nel costruttore della classe del programma di installazione personalizzato. Quando viene chiamato l'utilità di installazione, cerca l'attributo RunInstallerAttribute . Se l'attributo è true, l'utilità installa tutti i servizi aggiunti alla Installers raccolta associata al programma di installazione del progetto. Se RunInstallerAttribute è false o non esiste, l'utilità di installazione ignora il programma di installazione del progetto.
L'oggetto ServiceProcessInstaller associato alla classe di installazione del progetto installa le informazioni comuni a tutte le ServiceInstaller istanze del progetto. Se questo servizio contiene elementi che lo separano dagli altri servizi nel progetto di installazione, tali informazioni specifiche del servizio vengono installate da questo metodo.
Annotazioni
È fondamentale che l'oggetto ServiceName sia identico a quello ServiceBase.ServiceName della classe derivata da ServiceBase. In genere, il valore della ServiceBase.ServiceName proprietà per il servizio viene impostato all'interno della funzione Main() dell'eseguibile dell'applicazione di servizio. Gestione controllo servizi usa la ServiceInstaller.ServiceName proprietà per individuare il servizio all'interno di questo eseguibile.
È possibile modificare altre proprietà in ServiceInstaller prima o dopo l'aggiunta alla Installers raccolta del programma di installazione del progetto. Ad esempio, un servizio StartType può essere impostato per avviare automaticamente il servizio al riavvio o richiedere a un utente di avviare manualmente il servizio.
In genere, non si chiameranno i metodi ServiceInstaller all'interno del codice, ma in genere vengono chiamati solo dall'utilità di installazione. L'utilità di installazione chiama automaticamente i ServiceProcessInstaller.Install metodi e ServiceInstaller.Install durante il processo di installazione. Esegue il backout degli errori, se necessario, chiamando Rollback (o ServiceInstaller.Rollback) in tutti i componenti installati in precedenza.
L'utilità di installazione chiama Uninstall per rimuovere l'oggetto.
La routine di installazione di un'applicazione gestisce automaticamente le informazioni sui componenti già installati, usando il programma di installazione del Installer.Contextprogetto . Queste informazioni sullo stato vengono aggiornate continuamente come ServiceProcessInstaller istanza e ogni ServiceInstaller istanza viene installata dall'utilità. In genere non è necessario che il codice modifichi le informazioni sullo stato in modo esplicito.
Quando viene eseguita l'installazione, crea automaticamente un oggetto EventLogInstaller per installare l'origine del registro eventi associata alla ServiceBase classe derivata. La Log proprietà per questa origine viene impostata dal ServiceInstaller costruttore sul registro applicazioni del computer. Quando si imposta l'oggetto ServiceInstallerServiceName di (che deve essere identico a quello ServiceBase.ServiceName del servizio), l'oggetto Source viene impostato automaticamente sullo stesso valore. In un errore di installazione, viene eseguito il rollback dell'installazione dell'origine insieme ai servizi installati in precedenza.
Il Uninstall metodo tenta di arrestare il servizio se è in esecuzione. Indipendentemente dal fatto che l'operazione abbia esito positivo o negativo, Uninstall annulla le modifiche apportate da Install. Se è stata creata una nuova origine per la registrazione eventi, l'origine viene eliminata.
Costruttori
| Nome | Descrizione |
|---|---|
| ServiceInstaller() |
Inizializza una nuova istanza della classe ServiceInstaller. |
Proprietà
| Nome | Descrizione |
|---|---|
| CanRaiseEvents |
Ottiene un valore che indica se il componente può generare un evento. (Ereditato da Component) |
| Container |
Ottiene l'oggetto IContainer contenente l'oggetto Component. (Ereditato da Component) |
| Context |
Ottiene o imposta informazioni sull'installazione corrente. (Ereditato da Installer) |
| DelayedAutoStart |
Ottiene o imposta un valore che indica se il servizio deve essere ritardato dall'avvio fino a quando non vengono eseguiti altri servizi avviati automaticamente. |
| Description |
Ottiene o imposta la descrizione per il servizio. |
| DesignMode |
Ottiene un valore che indica se è Component attualmente in modalità progettazione. (Ereditato da Component) |
| DisplayName |
Indica il nome descrittivo che identifica il servizio all'utente. |
| Events |
Ottiene l'elenco dei gestori eventi associati a questo Componentoggetto . (Ereditato da Component) |
| HelpText |
Ottiene il testo della Guida per tutti i programmi di installazione nella raccolta del programma di installazione. (Ereditato da Installer) |
| Installers |
Ottiene la raccolta di programmi di installazione contenuti nel programma di installazione. (Ereditato da Installer) |
| Parent |
Ottiene o imposta il programma di installazione contenente la raccolta a cui appartiene il programma di installazione. (Ereditato da Installer) |
| ServiceName |
Indica il nome utilizzato dal sistema per identificare il servizio. Questa proprietà deve essere identica a quella ServiceName del servizio che si desidera installare. |
| ServicesDependedOn |
Indica i servizi che devono essere in esecuzione per l'esecuzione del servizio. |
| Site |
Ottiene o imposta l'oggetto ISite dell'oggetto Component. (Ereditato da Component) |
| StartType |
Indica come e quando questo servizio viene avviato. |
Metodi
| Nome | Descrizione |
|---|---|
| Commit(IDictionary) |
Quando sottoposto a override in una classe derivata, completa la transazione di installazione. (Ereditato da Installer) |
| CopyFromComponent(IComponent) |
Copia le proprietà da un'istanza di a questo programma di ServiceBase installazione. |
| CreateObjRef(Type) |
Crea un oggetto che contiene tutte le informazioni pertinenti necessarie per generare un proxy utilizzato per comunicare con un oggetto remoto. (Ereditato da MarshalByRefObject) |
| Dispose() |
Rilascia tutte le risorse usate da Component. (Ereditato da Component) |
| Dispose(Boolean) |
Rilascia le risorse non gestite usate da Component e, facoltativamente, rilascia le risorse gestite. (Ereditato da Component) |
| 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.
Recupera l'oggetto servizio di durata corrente che controlla i criteri di durata per questa istanza. (Ereditato da MarshalByRefObject) |
| GetService(Type) |
Restituisce un oggetto che rappresenta un servizio fornito da Component o da Container. (Ereditato da Component) |
| GetType() |
Ottiene il 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) |
| Install(IDictionary) |
Installa il servizio scrivendo le informazioni dell'applicazione di servizio nel Registro di sistema. Questo metodo è progettato per essere usato dagli strumenti di installazione, che elaborano automaticamente i metodi appropriati. |
| IsEquivalentInstaller(ComponentInstaller) |
Indica se due programmi di installazione installano lo stesso servizio. |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| MemberwiseClone(Boolean) |
Crea una copia superficiale dell'oggetto corrente MarshalByRefObject . (Ereditato da MarshalByRefObject) |
| OnAfterInstall(IDictionary) |
Genera l'evento AfterInstall. (Ereditato da Installer) |
| OnAfterRollback(IDictionary) |
Genera l'evento AfterRollback. (Ereditato da Installer) |
| OnAfterUninstall(IDictionary) |
Genera l'evento AfterUninstall. (Ereditato da Installer) |
| OnBeforeInstall(IDictionary) |
Genera l'evento BeforeInstall. (Ereditato da Installer) |
| OnBeforeRollback(IDictionary) |
Genera l'evento BeforeRollback. (Ereditato da Installer) |
| OnBeforeUninstall(IDictionary) |
Genera l'evento BeforeUninstall. (Ereditato da Installer) |
| OnCommitted(IDictionary) |
Genera l'evento Committed. (Ereditato da Installer) |
| OnCommitting(IDictionary) |
Genera l'evento Committing. (Ereditato da Installer) |
| Rollback(IDictionary) |
Esegue il rollback delle informazioni dell'applicazione di servizio scritte nel Registro di sistema dalla procedura di installazione. Questo metodo è progettato per essere usato dagli strumenti di installazione, che elaborano automaticamente i metodi appropriati. |
| ToString() |
Restituisce un oggetto String contenente il nome dell'oggetto Component, se presente. Questo metodo non deve essere sottoposto a override. (Ereditato da Component) |
| Uninstall(IDictionary) |
Disinstalla il servizio rimuovendo le informazioni sul servizio dal Registro di sistema. |
Eventi
| Nome | Descrizione |
|---|---|
| AfterInstall |
Si verifica dopo l'esecuzione Install(IDictionary) dei metodi di tutti i programmi di installazione nella Installers proprietà . (Ereditato da Installer) |
| AfterRollback |
Si verifica dopo il rollback delle installazioni di tutti i programmi di installazione nella Installers proprietà . (Ereditato da Installer) |
| AfterUninstall |
Si verifica dopo che tutti i programmi di installazione nella Installers proprietà eseguono le operazioni di disinstallazione. (Ereditato da Installer) |
| BeforeInstall |
Si verifica prima dell'esecuzione Install(IDictionary) del metodo di ogni programma di installazione nella raccolta del programma di installazione. (Ereditato da Installer) |
| BeforeRollback |
Si verifica prima del rollback dei programmi di installazione nella Installers proprietà . (Ereditato da Installer) |
| BeforeUninstall |
Si verifica prima che i programmi di installazione nella Installers proprietà eseguano le operazioni di disinstallazione. (Ereditato da Installer) |
| Committed |
Si verifica dopo che tutti i programmi di installazione nella proprietà hanno eseguito il Installers commit delle installazioni. (Ereditato da Installer) |
| Committing |
Si verifica prima che i programmi di installazione nella proprietà eseseguono il commit delle Installers installazioni. (Ereditato da Installer) |
| Disposed |
Si verifica quando il componente viene eliminato da una chiamata al Dispose() metodo . (Ereditato da Component) |