Freigeben über


ServiceInstaller Klasse

Definition

Installiert eine Klasse, die erweitert wird ServiceBase , um einen Dienst zu implementieren. Diese Klasse wird beim Installieren einer Dienstanwendung vom Installationsprogramm 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 erstellt, das aufgerufen MyProjectInstallerwird und von Installerdem geerbt wird. Es wird davon ausgegangen, dass es eine ausführbare Dienstdatei mit zwei Diensten "Hello-World Service 1" und "Hello-World Service 2" enthält. Innerhalb des Konstruktors für MyProjectInstaller (der vom Installationshilfsprogramm aufgerufen wird), ServiceInstaller werden Objekte für jeden dieser Dienste erstellt und eine ServiceProcessInstaller für die ausführbare Datei erstellt. Damit das Installationshilfsprogramm als gültiges Installationsprogramm erkannt MyProjectInstaller werden kann, wird das RunInstallerAttribute Attribut auf .true

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

Normalerweise erstellen Sie keine Instanz der Projektinstallationsklasse explizit. Sie würden es erstellen und das RunInstallerAttribute Attribut der Syntax hinzufügen, aber es ist das Installationshilfsprogramm, das tatsächlich aufruft und daher die Klasse 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

Dies ServiceInstaller funktioniert spezifisch für den Dienst, dem sie zugeordnet ist. Es wird vom Installationshilfsprogramm verwendet, um Registrierungswerte zu schreiben, die dem Dienst zugeordnet sind, in einen Unterschlüssel im HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services Registrierungsschlüssel. Der Dienst wird innerhalb dieses Unterschlüssels durch seinen ServiceName 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 true. Erstellen Sie in Ihrem Projekt eine ServiceProcessInstaller Instanz pro Dienstanwendung und eine ServiceInstaller Instanz für jeden Dienst in der Anwendung. Legen Sie in Ihrem Project Installer-Klassenkonstruktor die Installationseigenschaften für den Dienst mithilfe der ServiceProcessInstaller Und ServiceInstaller Instanzen 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 der Auflistung in der InstallersInstall Methode jedoch hinzufügen müssen, müssen Sie die gleichen Ergänzungen der Auflistung in der Uninstall Methode ausführen.

Für alle Klassen, die von der Installer Klasse abgeleitet werden, muss der Status der Installers Auflistung in den Install und Uninstall den Methoden identisch sein. Sie können jedoch die Wartung der Auflistung über die Install verschiedenen Methoden Uninstall hinweg vermeiden, wenn Sie der Installers Auflistung im Konstruktor der benutzerdefinierten Installer-Klasse Instanzen hinzufügen. Wenn das Installationshilfsprogramm aufgerufen wird, wird nach dem RunInstallerAttribute Attribut gesucht. Wenn das Attribut lautet true, installiert das Hilfsprogramm alle Dienste, die der Installers Auflistung hinzugefügt wurden, die ihrem Projektinstallationsprogramm zugeordnet wurden. Wenn RunInstallerAttribute vorhanden oder false nicht vorhanden, ignoriert das Installationsprogramm das Projektinstallationsprogramm.

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

Hinweis

Es ist entscheidend, dass die ServiceName identisch mit der ServiceBase.ServiceName Klasse sein, von ServiceBaseder Sie abgeleitet sind. Normalerweise wird der Wert der ServiceBase.ServiceName Eigenschaft für den Dienst innerhalb 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 ServiceInstaller vor oder nach dem Hinzufügen Installers zur Auflistung des Projektinstallationsprogramms ändern. Beispielsweise kann ein Dienst StartType so festgelegt sein, dass der Dienst automatisch beim Neustart gestartet wird, oder ein Benutzer muss den Dienst manuell starten.

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

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

Die Installationsroutine einer Anwendung verwaltet automatisch Informationen zu den bereits installierten Komponenten mithilfe des Projektinstallationsprogramms Installer.Context. Diese Statusinformationen werden kontinuierlich als ServiceProcessInstaller Instanz aktualisiert, und jede ServiceInstaller Instanz wird vom Hilfsprogramm installiert. Normalerweise ist es nicht erforderlich, dass Ihr Code Zustandsinformationen explizit ändert.

Wenn die Installation ausgeführt wird, wird automatisch eine EventLogInstaller Zum Installieren der Ereignisprotokollquelle erstellt, die der ServiceBase abgeleiteten Klasse zugeordnet ist. Die Log Eigenschaft für diese Quelle wird vom ServiceInstaller Konstruktor auf das Anwendungsprotokoll des Computers festgelegt. Wenn Sie den ServiceName Wert des ServiceInstaller (der mit dem ServiceBase.ServiceName Dienst identisch sein soll) festlegen, wird der Source Wert automatisch auf denselben Wert festgelegt. Bei einem Installationsfehler wird die Installation der Quelle zusammen mit zuvor installierten Diensten zurückgesetzt.

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

Konstruktoren

Name Beschreibung
ServiceInstaller()

Initialisiert eine neue Instanz der ServiceInstaller-Klasse.

Eigenschaften

Name Beschreibung
CanRaiseEvents

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

(Geerbt von Component)
Container

Ruft das, das IContainer die Component.

(Geerbt von Component)
Context

Ruft Informationen zur aktuellen Installation ab oder legt diese fest.

(Geerbt von Installer)
DelayedAutoStart

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob der Dienst vom Start bis zum Ausführen anderer automatisch gestarteter Dienste verzögert werden soll.

Description

Ruft die Beschreibung für den Dienst ab oder legt sie fest.

DesignMode

Ruft einen Wert ab, der angibt, ob sich der Component Entwurfsmodus derzeit befindet.

(Geerbt von Component)
DisplayName

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

Events

Ruft die Liste der Ereignishandler ab, die an diese Componentangefügt sind.

(Geerbt von Component)
HelpText

Ruft den Hilfetext für alle Installationsprogramme in der Installer-Auflistung ab.

(Geerbt von Installer)
Installers

Ruft die Auflistung der Installationsprogramme ab, die dieses Installationsprogramm enthält.

(Geerbt von Installer)
Parent

Ruft das Installationsprogramm ab, das die Auflistung enthält, zu der dieses Installationsprogramm gehört, oder legt diesen fest.

(Geerbt von Installer)
ServiceName

Gibt den Namen an, der vom System verwendet wird, um diesen Dienst zu identifizieren. Diese Eigenschaft muss mit dem ServiceName Dienst identisch sein, den Sie installieren möchten.

ServicesDependedOn

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

Site

Dient zum ISite Abrufen oder Festlegen des Werts des Component.

(Geerbt von Component)
StartType

Gibt an, wie und wann dieser Dienst gestartet wird.

Methoden

Name Beschreibung
Commit(IDictionary)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird die Installationstransaktion abgeschlossen.

(Geerbt von Installer)
CopyFromComponent(IComponent)

Kopiert Eigenschaften aus einer Instanz dieses ServiceBase Installers.

CreateObjRef(Type)

Erstellt ein Objekt, das alle relevanten Informationen enthält, die zum Generieren eines Proxys erforderlich sind, der für die Kommunikation mit einem Remoteobjekt verwendet wird.

(Geerbt von MarshalByRefObject)
Dispose()

Veröffentlicht alle ressourcen, die von der Component.

(Geerbt von Component)
Dispose(Boolean)

Gibt die nicht verwalteten Ressourcen frei, die von den Component verwalteten Ressourcen verwendet werden, und gibt optional die verwalteten Ressourcen frei.

(Geerbt von Component)
Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetLifetimeService()
Veraltet.

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

(Geerbt von MarshalByRefObject)
GetService(Type)

Gibt ein Objekt zurück, das einen Dienst darstellt, der von der Component oder dem zugehörigen ContainerDienst bereitgestellt wird.

(Geerbt von Component)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
InitializeLifetimeService()
Veraltet.

Ruft ein Lebensdauerdienstobjekt ab, um die Lebensdauerrichtlinie für diese Instanz zu steuern.

(Geerbt von MarshalByRefObject)
Install(IDictionary)

Installiert den Dienst durch Schreiben von Dienstanwendungsinformationen in die Registrierung. Diese Methode soll von Installationstools verwendet werden, die die entsprechenden Methoden automatisch verarbeiten.

IsEquivalentInstaller(ComponentInstaller)

Gibt an, ob zwei Installationsprogramme denselben Dienst installieren würden.

MemberwiseClone()

Erstellt eine flache Kopie der 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)

Rollback von Dienstanwendungsinformationen, die durch das Installationsverfahren in die Registrierung geschrieben wurden. Diese Methode soll von Installationstools verwendet werden, die die entsprechenden Methoden automatisch verarbeiten.

ToString()

Gibt einen String mit dem Namen des Component, falls vorhanden, zurück. Diese Methode sollte nicht außer Kraft gesetzt werden.

(Geerbt von Component)
Uninstall(IDictionary)

Deinstalliert den Dienst, indem Informationen dazu aus der Registrierung entfernt werden.

Ereignisse

Name Beschreibung
AfterInstall

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

(Geerbt von Installer)
AfterRollback

Tritt ein, nachdem die Installationen aller Installationsprogramme in der Installers Eigenschaft zurückgesetzt wurden.

(Geerbt von Installer)
AfterUninstall

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

(Geerbt von Installer)
BeforeInstall

Tritt auf, bevor die Install(IDictionary) Methode der einzelnen Installationsprogramme in der Installer-Auflistung ausgeführt wurde.

(Geerbt von Installer)
BeforeRollback

Tritt auf, bevor die Installationsprogramme in der Installers Eigenschaft zurückgesetzt werden.

(Geerbt von Installer)
BeforeUninstall

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

(Geerbt von Installer)
Committed

Tritt auf, nachdem alle Installationsprogramme in der Installers Eigenschaft ihre Installationen zugesichert haben.

(Geerbt von Installer)
Committing

Tritt auf, bevor die Installationsprogramme in der Installers Eigenschaft ihre Installationen übernehmen.

(Geerbt von Installer)
Disposed

Tritt auf, wenn die Komponente durch einen Aufruf der Dispose() Methode verworfen wird.

(Geerbt von Component)

Gilt für:

Weitere Informationen