Teilen über


ServiceInstaller Klasse

Definition

Installiert eine Klasse, die ServiceBase für die Implementierung eines Dienstes erweitert. Diese Klasse wird vom Installationsdienstprogramm beim Installieren einer Dienstanwendung aufgerufen.

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
Vererbung

Beispiele

Im folgenden Beispiel wird ein Projektinstallationsprogramm namens MyProjectInstallererstellt, das von Installererbt. Es wird davon ausgegangen, dass es eine ausführbare Dienstdatei gibt, die zwei Dienste enthält: "Hello-World Service 1" und "Hello-World Service 2". Innerhalb des Konstruktors für MyProjectInstaller (der vom Installationshilfsprogramm aufgerufen wird) ServiceInstaller werden Objekte für jeden dieser Dienste und ein ServiceProcessInstaller für die ausführbare Datei erstellt. Damit das Installationshilfsprogramm als gültiges Installationsprogramm erkennt MyProjectInstaller , wird das RunInstallerAttribute Attribut auf truefestgelegt.

Optionale Eigenschaften werden für das Prozessinstallationsprogramm und die Dienstinstallationsinstaller festgelegt, bevor die Installationsprogramme der Installers Auflistung hinzugefügt werden. Wenn das Installationshilfsprogramm auf zugreift MyProjectInstaller, werden die Objekte, die der Installers Auflistung über einen Aufruf von hinzugefügt wurden, InstallerCollection.Add nach und nach installiert. Während des Vorgangs verwaltet das Installationsprogramm Zustandsinformationen, die angeben, welche Objekte installiert wurden, sodass jedes nacheinander gesichert werden kann, wenn ein Installationsfehler auftritt.

Normalerweise würden Sie eine instance ihrer Projektinstallationsklasse nicht explizit erstellen. Sie würden sie erstellen und der Syntax das RunInstallerAttribute Attribut hinzufügen, aber es ist das Installationshilfsprogramm, das die -Klasse aufruft und daher instanziiert.

#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

Hinweise

Der ServiceInstaller funktioniert spezifisch für den Dienst, dem es zugeordnet ist. Es wird vom Installationshilfsprogramm verwendet, um dem Dienst zugeordnete Registrierungswerte in einen Unterschlüssel innerhalb des HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services Registrierungsschlüssels zu schreiben. Der Dienst wird durch seinen ServiceName in diesem Unterschlüssel identifiziert. Der Unterschlüssel enthält auch den Namen der ausführbaren Datei oder .dll, zu der der Dienst gehört.

Um einen Dienst zu installieren, erstellen Sie eine Projektinstallationsprogrammklasse, die von der Installer -Klasse erbt, und legen Sie das RunInstallerAttribute Attribut für die -Klasse auf fest true. Erstellen Sie innerhalb Ihres Projekts eine ServiceProcessInstaller instance pro Dienstanwendung und eine ServiceInstaller instance für jeden Dienst in der Anwendung. Legen Sie innerhalb des Klassenkonstruktors des Projektinstallationsprogramms die Installationseigenschaften für den Dienst mithilfe der ServiceProcessInstaller -Instanz und ServiceInstaller fest, und fügen Sie die Instanzen der Installers Auflistung hinzu.

Hinweis

Es wird empfohlen, den -Konstruktor zum Hinzufügen von Installationsinstanzen zu verwenden. Wenn Sie jedoch der Auflistung in der InstallersInstall -Methode hinzufügen müssen, stellen Sie sicher, dass Sie die gleichen Ergänzungen zur Auflistung in der Uninstall -Methode ausführen.

Für alle Klassen, die von der Installer -Klasse abgeleitet werden, muss der Zustand der Installers Auflistung in den Install Methoden und Uninstall identisch sein. Sie können jedoch die Wartung der Auflistung für die Install Methoden und Uninstall vermeiden, wenn Sie der Installers Auflistung in Ihrem benutzerdefinierten Installationsklassenkonstruktor Installerinstanzen hinzufügen. Wenn das Installationshilfsprogramm aufgerufen wird, sucht es nach dem RunInstallerAttribute -Attribut. Wenn das Attribut lautet true, installiert das Hilfsprogramm alle Dienste, die der Auflistung hinzugefügt wurden, die Installers Ihrem Projektinstallationsprogramm zugeordnet waren. Wenn RunInstallerAttribute vorhanden ist oder nicht vorhanden ist false , ignoriert das Installationshilfsprogramm das Projektinstallationsprogramm.

Die ServiceProcessInstaller ihrer Projektinstallationsklasse zugeordnete installiert Informationen, die allen ServiceInstaller Instanzen im Projekt gemeinsam sind. Wenn dieser Dienst über etwas verfügt, das ihn von den anderen Diensten im Installationsprojekt trennt, werden diese dienstspezifischen Informationen durch diese Methode installiert.

Hinweis

Es ist wichtig, dass mit ServiceName der ServiceBase.ServiceName der Klasse identisch ist, die Sie von ServiceBaseabgeleitet haben. Normalerweise wird der Wert der ServiceBase.ServiceName -Eigenschaft für den Dienst in der Main()-Funktion der ausführbaren Datei der Dienstanwendung festgelegt. Der Dienststeuerungs-Manager verwendet die ServiceInstaller.ServiceName -Eigenschaft, um den Dienst in dieser ausführbaren Datei zu suchen.

Sie können andere Eigenschaften entweder vor oder nach dem ServiceInstaller Hinzufügen zur Installers Auflistung Ihres Projektinstallationsprogramms ändern. Beispielsweise kann ein Dienst so festgelegt werden, dass StartType der Dienst automatisch beim Neustart gestartet wird, oder ein Benutzer muss den Dienst manuell starten.

Normalerweise rufen Sie die Methoden nicht in Ihrem Code auf ServiceInstaller . Sie werden im Allgemeinen nur vom Installationshilfsprogramm aufgerufen. Das Installationshilfsprogramm ruft während des Installationsvorgangs automatisch die ServiceProcessInstaller.Install Methoden und ServiceInstaller.Install auf. Bei Bedarf werden Fehler durch Aufrufen Rollback (oder ServiceInstaller.Rollback) für alle zuvor installierten Komponenten gesichert.

Das Installationshilfsprogramm ruft auf Uninstall , um das -Objekt zu entfernen.

Die Installationsroutine einer Anwendung verwaltet automatisch Informationen zu den bereits installierten Komponenten mithilfe des -Installationsprogramms des Installer.ContextProjekts. Diese Zustandsinformationen werden kontinuierlich als ServiceProcessInstaller instance aktualisiert, und jede ServiceInstaller instance wird vom Hilfsprogramm installiert. Es ist in der Regel nicht erforderlich, dass Ihr Code Zustandsinformationen explizit ändert.

Wenn die Installation ausgeführt wird, wird automatisch ein EventLogInstaller erstellt, um die Ereignisprotokollquelle zu installieren, die der abgeleiteten ServiceBase Klasse zugeordnet ist. Die Log -Eigenschaft für diese Quelle wird vom ServiceInstaller Konstruktor auf das Anwendungsprotokoll des Computers festgelegt. Wenn Sie den ServiceName von ServiceInstaller festlegen (der mit dem ServiceBase.ServiceName des Diensts identisch sein sollte), wird automatisch Source auf den gleichen Wert festgelegt. Bei einem Installationsfehler wird für die Installation der Quelle ein Rollback zusammen mit zuvor installierten Diensten ausgeführt.

Die Uninstall -Methode versucht, den Dienst zu beenden, wenn er ausgeführt wird. Unabhängig davon, ob dies erfolgreich ist, Uninstall werden die von vorgenommenen Änderungen rückgängig gemacht Install. Wenn eine neue Quelle für die Ereignisprotokollierung erstellt wurde, wird die Quelle gelöscht.

Konstruktoren

ServiceInstaller()

Initialisiert eine neue Instanz der ServiceInstaller-Klasse.

Eigenschaften

CanRaiseEvents

Ruft einen Wert ab, der angibt, ob die Komponente ein Ereignis auslösen kann.

(Geerbt von Component)
Container

Ruft die IContainer ab, die in der Component enthalten ist.

(Geerbt von Component)
Context

Ruft Informationen über die derzeitige Installation ab oder legt diese fest.

(Geerbt von Installer)
DelayedAutoStart

Ruft einen Wert ab, der angibt, ob der Start des Diensts verzögert werden soll, bis andere automatisch gestartete Dienste ausgeführt werden, oder legt ihn fest.

Description

Ruft die Beschreibung des Dienstes ab oder legt diese fest.

DesignMode

Ruft einen Wert ab, der angibt, ob sich Component gegenwärtig im Entwurfsmodus befindet.

(Geerbt von Component)
DisplayName

Gibt den angezeigten Namen an, der den Dienst für den Benutzer identifiziert.

Events

Ruft die Liste der Ereignishandler ab, die dieser Component angefügt sind.

(Geerbt von Component)
HelpText

Ruft den Hilfetext für alle in der entsprechenden Auflistung enthaltenen Installationsprogramme ab.

(Geerbt von Installer)
Installers

Ruft die Auflistung von Installationsprogrammen ab, die dieses Installationsprogramm enthält.

(Geerbt von Installer)
Parent

Ruft das Installationsprogramm ab, das die Auflistung mit diesem Installationsprogramm enthält, oder legt dieses fest.

(Geerbt von Installer)
ServiceName

Gibt den Namen an, mit dem das System diesen Dienst identifiziert. Diese Eigenschaft muss mit dem ServiceName des zu installierenden Dienstes übereinstimmen.

ServicesDependedOn

Gibt an, welche Dienste ausgeführt werden müssen, damit dieser Dienst ausgeführt werden kann.

Site

Ruft den ISite von Component ab oder legt ihn fest.

(Geerbt von Component)
StartType

Gibt an, wie und wann dieser Dienst gestartet wird.

Methoden

Commit(IDictionary)

Schließt beim Überschreiben in einer abgeleiteten Klasse die Installationstransaktion ab.

(Geerbt von Installer)
CopyFromComponent(IComponent)

Kopiert Eigenschaften aus einer Instanz von ServiceBase in dieses Installationsprogramm.

CreateObjRef(Type)

Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.

(Geerbt von MarshalByRefObject)
Dispose()

Gibt alle vom Component verwendeten Ressourcen frei.

(Geerbt von Component)
Dispose(Boolean)

Gibt die von Component verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei.

(Geerbt von Component)
Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetLifetimeService()
Veraltet.

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert.

(Geerbt von MarshalByRefObject)
GetService(Type)

Gibt ein Objekt zurück, das einen von der Component oder von deren Container bereitgestellten Dienst darstellt.

(Geerbt von Component)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
InitializeLifetimeService()
Veraltet.

Ruft ein Lebensdauerdienstobjekt zur Steuerung der Lebensdauerrichtlinie für diese Instanz ab.

(Geerbt von MarshalByRefObject)
Install(IDictionary)

Installiert den Dienst, indem Dienstanwendungsdaten in die Registrierung geschrieben werden. Diese Methode ist nur für die Verwendung durch Installationstools vorgesehen, die die entsprechenden Methoden automatisch verarbeiten.

IsEquivalentInstaller(ComponentInstaller)

Gibt an, ob zwei Installationsprogramme den gleichen Dienst installieren.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
MemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts.

(Geerbt von MarshalByRefObject)
OnAfterInstall(IDictionary)

Löst das AfterInstall-Ereignis aus.

(Geerbt von Installer)
OnAfterRollback(IDictionary)

Löst das AfterRollback-Ereignis aus.

(Geerbt von Installer)
OnAfterUninstall(IDictionary)

Löst das AfterUninstall-Ereignis aus.

(Geerbt von Installer)
OnBeforeInstall(IDictionary)

Löst das BeforeInstall-Ereignis aus.

(Geerbt von Installer)
OnBeforeRollback(IDictionary)

Löst das BeforeRollback-Ereignis aus.

(Geerbt von Installer)
OnBeforeUninstall(IDictionary)

Löst das BeforeUninstall-Ereignis aus.

(Geerbt von Installer)
OnCommitted(IDictionary)

Löst das Committed-Ereignis aus.

(Geerbt von Installer)
OnCommitting(IDictionary)

Löst das Committing-Ereignis aus.

(Geerbt von Installer)
Rollback(IDictionary)

Führt ein Rollback der Informationen über Dienstanwendungen durch, die bei der Installation in die Registrierung geschrieben wurden. Diese Methode ist nur für die Verwendung durch Installationstools vorgesehen, die die entsprechenden Methoden automatisch verarbeiten.

ToString()

Gibt einen String zurück, der den Namen der Component enthält (sofern vorhanden). Diese Methode darf nicht überschrieben werden.

(Geerbt von Component)
Uninstall(IDictionary)

Deinstalliert den Dienst, indem die entsprechenden Daten aus der Registrierung entfernt werden.

Ereignisse

AfterInstall

Tritt ein, nachdem die Install(IDictionary)-Methoden aller in der Installers-Eigenschaft enthaltenen Installationsprogramme ausgeführt wurden.

(Geerbt von Installer)
AfterRollback

Tritt ein, nachdem ein Rollback aller Installationen der Installationsprogramme in der Installers-Eigenschaft ausgeführt wurde.

(Geerbt von Installer)
AfterUninstall

Tritt ein, nachdem alle Installationsprogramme in der Installers-Eigenschaft ihre jeweiligen Deinstallationsvorgänge ausgeführt haben.

(Geerbt von Installer)
BeforeInstall

Tritt ein, bevor die Install(IDictionary)-Methode aller in der Auflistung der Installationsprogramme enthaltenen Installationsprogramme ausgeführt worden ist.

(Geerbt von Installer)
BeforeRollback

Tritt ein, bevor ein Rollback der Installationsprogramme in der Installers-Eigenschaft ausgeführt wird.

(Geerbt von Installer)
BeforeUninstall

Tritt ein, bevor die Installationsprogramme in der Installers-Eigenschaft ihre jeweiligen Deinstallationsvorgänge ausführen.

(Geerbt von Installer)
Committed

Tritt ein, nachdem alle Installationsprogramme in der Installers-Eigenschaft ein Commit für ihre Installationen ausgeführt haben.

(Geerbt von Installer)
Committing

Tritt ein, bevor die Installationsprogramme in der Installers-Eigenschaft ein Commit für ihre Installationen ausführen.

(Geerbt von Installer)
Disposed

Tritt auf, wenn die Komponente von einem Aufruf der Dispose()-Methode verworfen wird.

(Geerbt von Component)

Gilt für:

Weitere Informationen