ServiceInstaller Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 MyProjectInstaller
erstellt, 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 true
festgelegt.
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) |