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

Poniższy przykład tworzy instalatora projektu o nazwie MyProjectInstaller, który dziedziczy z Installer. 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 ( MyProjectInstaller który jest wywoływany przez narzędzie instalacyjne) ServiceInstaller obiekty są tworzone dla każdej z tych usług, a ServiceProcessInstaller obiekt jest tworzony dla pliku wykonywalnego. Aby narzędzie instalacyjne było rozpoznawane MyProjectInstaller jako prawidłowy instalator, RunInstallerAttribute atrybut jest ustawiony na true.

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 zachowuje informacje o stanie wskazującym, 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 zatem 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

Ta ServiceInstaller funkcja 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 ramach tego podklucza. 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 dziedziczą po Installer klasie i ustaw RunInstallerAttribute atrybut klasy na true. 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 dla usługi przy użyciu ServiceProcessInstaller wystąpień i ServiceInstaller i dodaj wystąpienia do Installers kolekcji.

Uwaga

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

Dla wszystkich klas pochodnych z Installer klasy stan Installers kolekcji musi być taki sam w Install metodach i Uninstall . Można jednak uniknąć konserwacji kolekcji we wszystkich Install metodach i Uninstall , jeśli dodasz wystąpienia instalatora do Installers kolekcji w konstruktorze klasy instalatora niestandardowego. 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 false lub nie istnieje, narzędzie instalacji ignoruje instalatora projektu.

Skojarzona ServiceProcessInstaller z klasą instalacji projektu 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

Niezwykle ważne jest, aby ServiceName była identyczna ServiceBase.ServiceName z klasą uzyskaną 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 do zlokalizowania usługi w tym pliku wykonywalnego.

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

Zwykle metody nie będą wywoływane ServiceInstaller w kodzie. Zazwyczaj są one 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 Rollback polecenie (lub ServiceInstaller.Rollback) we wszystkich wcześniej zainstalowanych składnikach.

Narzędzie instalacyjne wywołuje metodę Uninstall , aby usunąć obiekt .

Procedura instalacji aplikacji automatycznie przechowuje informacje o już zainstalowanych składnikach 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 dla tego źródła jest ustawiana przez ServiceInstaller konstruktora na dziennik aplikacji komputera. Po ustawieniu ServiceName elementu ServiceInstaller (który powinien być identyczny ServiceBase.ServiceName z usługą), parametr Source jest automatycznie ustawiany na tę samą wartość. W przypadku niepowodzenia instalacji instalacja źródła zostanie wycofana 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 cofa zmiany wprowadzone przez Installprogram . Jeśli nowe źródło zostało utworzone na potrzeby rejestrowania zdarzeń, źródło zostanie usunięte.

Konstruktory

ServiceInstaller()

Inicjuje nowe wystąpienie klasy ServiceInstaller.

Właściwości

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 zostać 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 Componentelementu .

(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 instalatora zawierającego 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 ISite element .Component

(Odziedziczone po Component)
StartType

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

Metody

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 wszelkie zasoby używane przez element Component.

(Odziedziczone po Component)
Dispose(Boolean)

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

(Odziedziczone po Component)
Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(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()

Type Pobiera bieżące wystąpienie.

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

Uzyskuje obiekt usługi okresu istnienia, aby kontrolować zasady 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 przetwarzają odpowiednie metody automatycznie.

IsEquivalentInstaller(ComponentInstaller)

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

MemberwiseClone()

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

(Odziedziczone po Object)
MemberwiseClone(Boolean)

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

(Odziedziczone po MarshalByRefObject)
OnAfterInstall(IDictionary)

AfterInstall Zgłasza zdarzenie.

(Odziedziczone po Installer)
OnAfterRollback(IDictionary)

AfterRollback Zgłasza zdarzenie.

(Odziedziczone po Installer)
OnAfterUninstall(IDictionary)

AfterUninstall Zgłasza zdarzenie.

(Odziedziczone po Installer)
OnBeforeInstall(IDictionary)

BeforeInstall Zgłasza zdarzenie.

(Odziedziczone po Installer)
OnBeforeRollback(IDictionary)

BeforeRollback Zgłasza zdarzenie.

(Odziedziczone po Installer)
OnBeforeUninstall(IDictionary)

BeforeUninstall Zgłasza zdarzenie.

(Odziedziczone po Installer)
OnCommitted(IDictionary)

Committed Zgłasza zdarzenie.

(Odziedziczone po Installer)
OnCommitting(IDictionary)

Committing Zgłasza 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 przetwarzają odpowiednie metody automatycznie.

ToString()

Zwraca wartość String zawierającą nazwę Componentobiektu , 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

AfterInstall

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

(Odziedziczone po Installer)
AfterRollback

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

(Odziedziczone po Installer)
AfterUninstall

Występuje po wykonaniu Installers operacji dezinstalacji przez wszystkich instalatorów w 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 dezinstalacji przez instalatorów w Installers właściwości.

(Odziedziczone po Installer)
Committed

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

(Odziedziczone po Installer)
Committing

Występuje przed zatwierdzeniem instalacji przez instalatorów w Installers właściwości.

(Odziedziczone po Installer)
Disposed

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

(Odziedziczone po Component)

Dotyczy

Zobacz też