Udostępnij za pośrednictwem


ServiceInstaller Klasa

Definicja

Instaluje klasę, która rozszerza ServiceBase się w celu zaimplementowania usługi. Ta klasa jest wywoływana przez narzędzie instalacyjne podczas instalowania aplikacji usługi.

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
Dziedziczenie

Przykłady

W poniższym przykładzie tworzony jest instalator projektu o nazwie MyProjectInstaller, który dziedziczy z Installerelementu . Zakłada się, że istnieje plik wykonywalny usługi zawierający dwie usługi "Hello-World Service 1" i "Hello-World Service 2". W konstruktorze programu MyProjectInstaller (który będzie wywoływany przez narzędzie instalacyjne) ServiceInstaller obiekty są tworzone dla każdej z tych usług, a obiekt ServiceProcessInstaller jest tworzony dla pliku wykonywalnego. Aby narzędzie instalacyjne rozpoznawało MyProjectInstaller jako prawidłowy instalator, RunInstallerAttribute atrybut jest ustawiony na truewartość .

Opcjonalne właściwości są ustawiane w instalatorze procesu, a instalatory usług przed dodaniu instalatorów do Installers kolekcji. Gdy narzędzie instalacyjne uzyskuje dostęp do MyProjectInstallerprogramu , obiekty dodane do Installers kolekcji za pośrednictwem wywołania InstallerCollection.Add zostaną zainstalowane z kolei. Podczas procesu instalator przechowuje informacje o stanie wskazujące, które obiekty zostały zainstalowane, dzięki czemu każdy z nich może zostać wycofany z kolei, jeśli wystąpi awaria instalacji.

Zwykle nie można jawnie utworzyć wystąpienia klasy instalatora projektu. Można go utworzyć i dodać RunInstallerAttribute atrybut do składni, ale jest to narzędzie instalacyjne, które faktycznie wywołuje, a w związku z tym tworzy wystąpienie klasy.

#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

Uwagi

Funkcja ServiceInstaller działa specyficznie dla usługi, z którą jest skojarzona. Jest on używany przez narzędzie instalacyjne do zapisywania wartości rejestru skojarzonych z usługą w podkluczu w kluczu rejestru HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Usługa jest identyfikowana przez nazwę usługi w tym podkluczu. Podklucz zawiera również nazwę pliku wykonywalnego lub .dll, do którego należy usługa.

Aby zainstalować usługę, utwórz klasę instalatora projektu, która dziedziczy z Installer klasy, i ustaw RunInstallerAttribute atrybut w klasie na truewartość . W projekcie utwórz jedno ServiceProcessInstaller wystąpienie dla aplikacji usługi i jedno ServiceInstaller wystąpienie dla każdej usługi w aplikacji. W konstruktorze klasy instalatora projektu ustaw właściwości instalacji usługi przy użyciu ServiceProcessInstaller wystąpień i ServiceInstaller i dodaj wystąpienia do Installers kolekcji.

Uwaga / Notatka

Zaleca się użycie konstruktora do dodawania wystąpień instalatora; jeśli jednak musisz dodać do Installers kolekcji w metodzie Install , pamiętaj, aby wykonać te same dodatki do kolekcji w metodzie Uninstall .

W przypadku wszystkich klas pochodnych z Installer klasy stan Installers kolekcji musi być taki sam w metodach Install i Uninstall . Można jednak uniknąć konserwacji kolekcji we wszystkich Install metodach i Uninstall , jeśli dodasz wystąpienia instalatora do Installers kolekcji w niestandardowym konstruktorze klasy instalatora. Po wywołaniu narzędzia instalacyjnego szuka atrybutu RunInstallerAttribute . Jeśli atrybut to true, narzędzie instaluje wszystkie usługi dodane do Installers kolekcji skojarzonej z instalatorem projektu. Jeśli RunInstallerAttribute jest lub false nie istnieje, narzędzie instalacji ignoruje instalatora projektu.

Klasa ServiceProcessInstaller instalacji skojarzonej z projektem instaluje informacje wspólne dla wszystkich ServiceInstaller wystąpień w projekcie. Jeśli ta usługa ma coś, co oddziela ją od innych usług w projekcie instalacyjnym, te informacje specyficzne dla usługi są instalowane przez tę metodę.

Uwaga / Notatka

Istotne jest, aby klasa ServiceNameServiceBase.ServiceName pochodziła z ServiceBaseklasy . Zwykle wartość ServiceBase.ServiceName właściwości usługi jest ustawiana w funkcji Main() pliku wykonywalnego aplikacji usługi. Program Service Control Manager używa ServiceInstaller.ServiceName właściwości , aby zlokalizować usługę w tym pliku wykonywalnego.

Inne właściwości można modyfikować przed ServiceInstaller lub po dodaniu ich do Installers kolekcji instalatora projektu. Na przykład usługę StartType można ustawić tak, aby automatycznie uruchamiała usługę po ponownym uruchomieniu lub wymagać od użytkownika ręcznego uruchomienia usługi.

Zwykle metody w kodzie nie są wywoływane ServiceInstaller ; są one zwykle wywoływane tylko przez narzędzie instalacyjne. Narzędzie instalacyjne automatycznie wywołuje ServiceProcessInstaller.Install metody i ServiceInstaller.Install podczas procesu instalacji. W razie potrzeby usuwa błędy, wywołując metodę Rollback (lub ServiceInstaller.Rollback) we wszystkich wcześniej zainstalowanych składnikach.

Narzędzie instalacyjne wywołuje polecenie Uninstall w celu usunięcia obiektu.

Rutynowa instalacja aplikacji automatycznie przechowuje informacje o składnikach, które zostały już zainstalowane, przy użyciu instalatora Installer.Contextprojektu . Te informacje o stanie są stale aktualizowane jako ServiceProcessInstaller wystąpienie, a każde ServiceInstaller wystąpienie jest instalowane przez narzędzie. Zwykle kod nie musi jawnie modyfikować informacji o stanie.

Po zakończeniu instalacji program automatycznie tworzy element EventLogInstaller w celu zainstalowania źródła dziennika zdarzeń skojarzonego z klasą pochodną ServiceBase . Właściwość Log tego źródła jest ustawiana przez ServiceInstaller konstruktora na dziennik aplikacji komputera. Po ustawieniu ServiceNameServiceInstaller wartości (która powinna być identyczna z ServiceBase.ServiceName usługą), parametr Source jest automatycznie ustawiany na tę samą wartość. W przypadku niepowodzenia instalacji instalacja źródła jest cofana wraz z wcześniej zainstalowanymi usługami.

Metoda Uninstall próbuje zatrzymać usługę, jeśli jest uruchomiona. Niezależnie od tego, czy to się powiedzie, czy nie, Uninstall cofnie zmiany wprowadzone przez Installprogram . Jeśli nowe źródło zostało utworzone na potrzeby rejestrowania zdarzeń, źródło zostanie usunięte.

Konstruktory

Nazwa Opis
ServiceInstaller()

Inicjuje nowe wystąpienie klasy ServiceInstaller.

Właściwości

Nazwa Opis
CanRaiseEvents

Pobiera wartość wskazującą, czy składnik może zgłosić zdarzenie.

(Odziedziczone po Component)
Container

Pobiera element IContainer zawierający element Component.

(Odziedziczone po Component)
Context

Pobiera lub ustawia informacje o bieżącej instalacji.

(Odziedziczone po Installer)
DelayedAutoStart

Pobiera lub ustawia wartość wskazującą, czy usługa powinna być opóźniona od uruchomienia do momentu uruchomienia innych automatycznie uruchomionych usług.

Description

Pobiera lub ustawia opis usługi.

DesignMode

Pobiera wartość wskazującą, czy Component element jest obecnie w trybie projektowania.

(Odziedziczone po Component)
DisplayName

Wskazuje przyjazną nazwę identyfikującą usługę użytkownikowi.

Events

Pobiera listę programów obsługi zdarzeń dołączonych do tego elementu Component.

(Odziedziczone po Component)
HelpText

Pobiera tekst pomocy dla wszystkich instalatorów w kolekcji instalatora.

(Odziedziczone po Installer)
Installers

Pobiera kolekcję instalatorów, które zawiera ten instalator.

(Odziedziczone po Installer)
Parent

Pobiera lub ustawia instalator zawierający kolekcję, do którego należy ten instalator.

(Odziedziczone po Installer)
ServiceName

Wskazuje nazwę używaną przez system do identyfikowania tej usługi. Ta właściwość musi być identyczna z ServiceName usługą, którą chcesz zainstalować.

ServicesDependedOn

Wskazuje usługi, które muszą być uruchomione dla tej usługi do uruchomienia.

Site

Pobiera lub ustawia wartość ISite .Component

(Odziedziczone po Component)
StartType

Wskazuje, jak i kiedy ta usługa jest uruchomiona.

Metody

Nazwa Opis
Commit(IDictionary)

Po zastąpieniu w klasie pochodnej kończy transakcję instalacji.

(Odziedziczone po Installer)
CopyFromComponent(IComponent)

Kopiuje właściwości z wystąpienia ServiceBase do tego instalatora.

CreateObjRef(Type)

Tworzy obiekt zawierający wszystkie istotne informacje wymagane do wygenerowania serwera proxy używanego do komunikowania się z obiektem zdalnym.

(Odziedziczone po MarshalByRefObject)
Dispose()

Zwalnia wszystkie zasoby używane przez program Component.

(Odziedziczone po Component)
Dispose(Boolean)

Zwalnia niezarządzane zasoby używane przez Component program i opcjonalnie zwalnia zarządzane zasoby.

(Odziedziczone po Component)
Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetLifetimeService()
Przestarzałe.

Pobiera bieżący obiekt usługi okresu istnienia, który kontroluje zasady okresu istnienia dla tego wystąpienia.

(Odziedziczone po MarshalByRefObject)
GetService(Type)

Zwraca obiekt reprezentujący usługę dostarczaną przez Component obiekt lub przez obiekt Container.

(Odziedziczone po Component)
GetType()

Pobiera Type bieżącego wystąpienia.

(Odziedziczone po Object)
InitializeLifetimeService()
Przestarzałe.

Uzyskuje obiekt usługi okresu istnienia w celu kontrolowania zasad okresu istnienia dla tego wystąpienia.

(Odziedziczone po MarshalByRefObject)
Install(IDictionary)

Instaluje usługę, zapisując informacje o aplikacji usługi w rejestrze. Ta metoda ma być używana przez narzędzia instalacyjne, które automatycznie przetwarzają odpowiednie metody.

IsEquivalentInstaller(ComponentInstaller)

Wskazuje, czy dwa instalatory będą instalować tę samą usługę.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Object.

(Odziedziczone po Object)
MemberwiseClone(Boolean)

Tworzy płytkią kopię bieżącego MarshalByRefObject obiektu.

(Odziedziczone po MarshalByRefObject)
OnAfterInstall(IDictionary)

AfterInstall Wywołuje zdarzenie.

(Odziedziczone po Installer)
OnAfterRollback(IDictionary)

AfterRollback Wywołuje zdarzenie.

(Odziedziczone po Installer)
OnAfterUninstall(IDictionary)

AfterUninstall Wywołuje zdarzenie.

(Odziedziczone po Installer)
OnBeforeInstall(IDictionary)

BeforeInstall Wywołuje zdarzenie.

(Odziedziczone po Installer)
OnBeforeRollback(IDictionary)

BeforeRollback Wywołuje zdarzenie.

(Odziedziczone po Installer)
OnBeforeUninstall(IDictionary)

BeforeUninstall Wywołuje zdarzenie.

(Odziedziczone po Installer)
OnCommitted(IDictionary)

Committed Wywołuje zdarzenie.

(Odziedziczone po Installer)
OnCommitting(IDictionary)

Committing Wywołuje zdarzenie.

(Odziedziczone po Installer)
Rollback(IDictionary)

Przywraca informacje o aplikacji usługi zapisywane w rejestrze przez procedurę instalacji. Ta metoda ma być używana przez narzędzia instalacyjne, które automatycznie przetwarzają odpowiednie metody.

ToString()

Zwraca wartość zawierającą String nazwę Component, jeśli istnieje. Ta metoda nie powinna być zastępowana.

(Odziedziczone po Component)
Uninstall(IDictionary)

Odinstalowuje usługę, usuwając informacje o niej z rejestru.

Zdarzenia

Nazwa Opis
AfterInstall

Występuje po Install(IDictionary) uruchomieniu metod wszystkich instalatorów we Installers właściwości .

(Odziedziczone po Installer)
AfterRollback

Występuje po wycofaniu instalacji wszystkich instalatorów we Installers właściwości .

(Odziedziczone po Installer)
AfterUninstall

Występuje po wykonaniu Installers operacji odinstalowywania wszystkich instalatorów we właściwości.

(Odziedziczone po Installer)
BeforeInstall

Występuje przed uruchomieniem Install(IDictionary) metody każdego instalatora w kolekcji instalatora.

(Odziedziczone po Installer)
BeforeRollback

Występuje przed wycofaniem instalatorów we Installers właściwości .

(Odziedziczone po Installer)
BeforeUninstall

Występuje przed wykonaniem operacji odinstalowywania przez instalatorów w Installers właściwości .

(Odziedziczone po Installer)
Committed

Występuje po zatwierdzeniu instalacji przez wszystkie instalatory we Installers właściwości.

(Odziedziczone po Installer)
Committing

Występuje przed instalatorami we Installers właściwości zatwierdzenia instalacji.

(Odziedziczone po Installer)
Disposed

Występuje, gdy składnik jest usuwany przez wywołanie Dispose() metody .

(Odziedziczone po Component)

Dotyczy

Zobacz też