Installa un eseguibile contenente le classi che estendono
ServiceBase. Questa classe viene chiamata dalle utilità di installazione, quale InstallUtil.exe, durante l'installazione di un'applicazione di servizio.
Spazio dei nomi: System.ServiceProcess
Assembly: System.ServiceProcess (in system.serviceprocess.dll)
Visual Basic - (Dichiarazione)
Public Class ServiceProcessInstaller
Inherits ComponentInstaller
Dim instance As ServiceProcessInstaller
public class ServiceProcessInstaller : ComponentInstaller
public ref class ServiceProcessInstaller : public ComponentInstaller
public class ServiceProcessInstaller extends ComponentInstaller
public class ServiceProcessInstaller extends ComponentInstaller
ServiceProcessInstaller esegue operazioni comuni a tutti i servizi in un eseguibile. Viene utilizzata dall'utilità di installazione per scrivere i valori di registro associati ai servizi da installare.
Per installare un servizio, creare una classe di installazione progetti che eredita da Installer e impostare l'oggetto 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 nell'applicazione. Infine, aggiungere l'istanza di ServiceProcessInstaller e le istanze di ServiceInstaller alla classe del programma di installazione del progetto.
Durante l'esecuzione di InstallUtil.exe nell'assembly del servizio vengono ricercate le classi con l'attributo RunInstallerAttribute impostato su true. Aggiungere classi all'assembly del servizio inserendole nell'insieme Installers associato al programma di installazione del progetto. Se l'attributo RunInstallerAttribute è impostato su false, il programma di installazione del progetto verrà ignorato dall'utilità di installazione.
Nel caso di un'istanza di ServiceProcessInstaller, tra le proprietà modificabili è possibile specificare che l'applicazione di servizio può essere eseguita in un account diverso rispetto all'utente connesso. È possibile specificare una particolare coppia di proprietà Username e Password che consente l'esecuzione del servizio, oppure utilizzare la proprietà Account per specificare l'esecuzione del servizio con l'account System del computer, con un account di servizio di rete o locale o con un account utente.
Nota |
|---|
| L'account System del computer non corrisponde all'account Administrator. |
Di norma non vengono chiamati i metodi su ServiceInstaller all'interno del codice, in quanto questi generalmente 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.
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 queste informazioni sullo stato in modo esplicito.
La creazione di un'istanza di ServiceProcessInstaller determina il richiamo del costruttore della classe base, ComponentInstaller.
Nell'esempio seguente viene descritta la creazione di un programma di installazione di progetto denominato MyProjectInstaller, che eredita da Installer. Si presuppone l'esistenza di un eseguibile di servizio contenente due servizi, "Hello-World Service 1" e "Hello-World Service 2". All'interno del costruttore per MyProjectInstaller (che viene richiamato dall'utilità di installazione), per ogni servizio vengono creati oggetti ServiceInstaller e per l'eseguibile viene creata una classe ServiceProcessInstaller. Per consentire all'utilità di installazione di riconoscere MyProjectInstaller come programma di installazione valido, l'attributo RunInstallerAttribute è impostato su true.
Prima di aggiungere i programmi di installazione all'insieme Installers, vengono aggiunte le proprietà opzionali ai programmi di installazione del processo e dei servizi. Quando l'utilità di installazione accede a MyProjectInstaller, verranno installati ad uno ad uno gli oggetti aggiunti all'insieme Installers tramite una chiamata a InstallerCollection.Add. Nel corso di questo processo, il programma di installazione mantiene informazioni sullo stato che indicano quali oggetti sono stati installati, per consentire il ripristino in caso di errori.
È generalmente sconsigliabile creare esplicitamente un'istanza della classe del programma di installazione del progetto. È preferibile invece creare la classe e aggiungere l'attributo RunInstallerAttribute, lasciando che sia l'utilità di installazione a richiamarla effettivamente, e quindi a crearne un'istanza.
Imports System
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
End Class
using System;
using System.Collections;
using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;
[RunInstallerAttribute(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);
}
}
#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;
[RunInstallerAttribute(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 );
}
};
import System.*;
import System.Collections.*;
import System.Configuration.Install.*;
import System.ServiceProcess.*;
import System.ComponentModel.*;
/** @attribute RunInstallerAttribute(true)
*/
public class MyProjectInstaller extends 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.set_Account(ServiceAccount.LocalSystem);
// The services are started manually.
serviceInstaller1.set_StartType(ServiceStartMode.Manual);
serviceInstaller2.set_StartType(ServiceStartMode.Manual);
// ServiceName must equal those on ServiceBase derived classes.
serviceInstaller1.set_ServiceName("Hello-World Service 1");
serviceInstaller2.set_ServiceName("Hello-World Service 2");
// Add installers to collection. Order is not important.
get_Installers().Add(serviceInstaller1);
get_Installers().Add(serviceInstaller2);
get_Installers().Add(processInstaller);
} //MyProjectInstaller
} //MyProjectInstaller
Gerarchia di ereditarietà
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Configuration.Install.Installer
System.Configuration.Install.ComponentInstaller
System.ServiceProcess.ServiceProcessInstaller
I membri statici pubblici (Shared in Visual Basic) di questo tipo sono validi per le operazioni multithreading. I membri di istanza non sono garantiti come thread safe.
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.
Informazioni sulla versione
.NET Framework
Supportato in: 2.0 1.1 1.0