ServiceProcessInstaller-Klasse
Installiert eine ausführbare Datei, die Klassen enthält, die ServiceBase erweitern. Diese Klasse wird von Installationsprogrammen, z. B. von InstallUtil.exe, beim Installieren einer Dienstanwendung aufgerufen.
Namespace: System.ServiceProcess
Assembly: System.ServiceProcess (in system.serviceprocess.dll)
Syntax
'Declaration
Public Class ServiceProcessInstaller
Inherits ComponentInstaller
'Usage
Dim instance As ServiceProcessInstaller
public class ServiceProcessInstaller : ComponentInstaller
public ref class ServiceProcessInstaller : public ComponentInstaller
public class ServiceProcessInstaller extends ComponentInstaller
public class ServiceProcessInstaller extends ComponentInstaller
Hinweise
Der ServiceProcessInstaller übernimmt Aufgaben in einer ausführbaren Datei, die alle Dienste miteinander teilen. Dieser wird vom Installationsprogramm verwendet, um Registrierungswerte für die zu installierenden Dienste einzutragen.
Erstellen Sie zum Installieren eines Dienstes eine Projektinstallationsprogramm-Klasse, die von Installer erbt, und legen Sie das RunInstallerAttribute der Klasse auf true fest. Instanziieren Sie für jede Dienstanwendung im Projekt eine ServiceProcessInstaller-Instanz und für jeden Dienst der Anwendung jeweils eine ServiceInstaller-Instanz. Fügen Sie dann die ServiceProcessInstaller-Instanz und die ServiceInstaller-Instanzen der Projektinstallationsprogramm-Klasse hinzu.
Beim Ausführen von InstallUtil.exe sucht das Dienstprogramm in der Dienstassembly nach Klassen, deren RunInstallerAttribute auf true festgelegt ist. Fügen Sie der Dienstassembly Klassen hinzu, indem Sie diese der zugeordneten Installers-Auflistung des Projektinstallationsprogramms hinzufügen. Wenn RunInstallerAttribute false ist, ignoriert das Installationsdienstprogramm das Projektinstallationsprogramm.
ServiceProcessInstaller-Instanzen beinhalten Eigenschaften, die geändert werden können. Über diese kann unter anderem festgelegt werden, dass eine Dienstanwendung unter einem anderen Konto als dem des angemeldeten Benutzers ausgeführt werden soll. Sie können ein bestimmtes Paar aus Username und Password angeben, unter dem der Dienst ausgeführt werden soll, oder Account verwenden, um das Ausführen des Dienstes unter dem Systemkonto des Computers, einem lokalen oder Netzwerkdienstkonto oder einem Benutzerkonto anzugeben.
Hinweis
Das Systemkonto des Computers ist nicht identisch mit dem Administratorkonto.
Normalerweise rufen Sie die Methoden für ServiceInstaller nicht im Code auf. Diese werden i. d. R. nur vom Installationsdienstprogramm aufgerufen. Das Installationsdienstprogramm ruft die ServiceProcessInstaller.Install-Methode und die ServiceInstaller.Install-Methode bei der Installation automatisch auf. Im Bedarfsfall werden Fehler behoben, indem Rollback oder ServiceInstaller.Rollback für alle zuvor installierten Komponenten aufgerufen wird.
Die Installationsroutine einer Anwendung verwaltet automatisch Informationen über bereits installierte Komponenten. Dazu wird der Installer.Context des Projektinstallationsprogramms verwendet. Diese Zustandsinformationen werden fortlaufend aktualisiert, während das Dienstprogramm die ServiceProcessInstaller-Instanz und alle ServiceInstaller-Instanzen installiert. Normalerweise ist es nicht erforderlich, dass der Code diese Zustandsinformationen explizit ändert.
Beim Instanziieren eines ServiceProcessInstaller erfolgt ein Aufruf des ComponentInstaller-Konstruktors der Basisklasse.
Beispiel
Im folgenden Beispiel wird ein Projektinstallationsprogramm mit dem Namen MyProjectInstaller erstellt, das von Installer erbt. Dabei wird angenommen, dass eine ausführbare Datei vorhanden ist, die die beiden Dienste "Hello-World Service 1" und "Hello-World Service 2" enthält. Im Konstruktor für MyProjectInstaller, der vom Installationsdienstprogramm aufgerufen wird, werden ServiceInstaller-Objekte für jeden Dienst und ein ServiceProcessInstaller für die ausführbare Datei erstellt. Damit das Installationsdienstprogramm MyProjectInstaller als gültiges Installationsprogramm erkennt, wird das RunInstallerAttribute-Attribut auf true festgelegt.
Nach dem Festlegen optionaler Eigenschaften für das Prozess- und Dienstinstallationsprogramm werden die Installationsprogramme der Installers-Auflistung hinzugefügt. Wenn das Installationsprogramm auf MyProjectInstaller zugreift, werden die Objekte installiert, die der Installers-Auflistung durch Aufrufen von InstallerCollection.Add hinzugefügt wurden. Während des Vorgangs verwaltet das Installationsprogramm Zustandsinformationen, die angeben, welche Objekte installiert wurden, sodass die Installation jedes einzelnen Objekts im Falle eines Installationsfehlers wieder rückgängig gemacht werden kann.
Üblicherweise wird die Projektinstallationsprogramm-Klasse nicht explizit instanziiert. Sie erstellen die Klasse und fügen das RunInstallerAttribute hinzu, die Klasse wird jedoch vom Installationsdienstprogramm direkt aufgerufen und damit instanziiert.
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
Vererbungshierarchie
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Configuration.Install.Installer
System.Configuration.Install.ComponentInstaller
System.ServiceProcess.ServiceProcessInstaller
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
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 unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
ServiceProcessInstaller-Member
System.ServiceProcess-Namespace
ServiceInstaller-Klasse
ServiceBase-Klasse
ComponentInstaller
Installers
ServiceAccount-Enumeration
ServiceInstallerDialog