Sdílet prostřednictvím


ServiceInstaller Třída

Definice

Nainstaluje třídu, která se rozšiřuje ServiceBase o implementaci služby. Tato třída je volána instalačním nástrojem při instalaci aplikace služby.

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
Dědičnost

Příklady

Následující příklad vytvoří instalační program projektu s názvem MyProjectInstaller, který dědí z Installer. Předpokládá se, že existuje spustitelný soubor služby, který obsahuje dvě služby: "Hello-World Service 1" a "Hello-World Service 2". V konstruktoru pro MyProjectInstaller (který by byl volána instalačním nástrojem) ServiceInstaller se pro každou z těchto služeb vytvoří objekty a ServiceProcessInstaller pro spustitelný soubor se vytvoří. Aby instalační nástroj rozpoznal MyProjectInstaller jako platný instalační program, RunInstallerAttribute je atribut nastaven na truehodnotu .

Volitelné vlastnosti jsou nastaveny v instalačním programu procesu a instalačním programu služby před jejich přidání do Installers kolekce. Při přístupu MyProjectInstallerinstalačního nástroje se objekty přidané do Installers kolekce prostřednictvím volání InstallerCollection.Add nainstalují. Během procesu instalační program udržuje informace o stavu, které indikují, které objekty byly nainstalovány, takže každý z nich může být následně zálohovaný, pokud dojde k selhání instalace.

Za normálních okolností byste explicitně nevytvoří instanci třídy instalačního programu projektu. Vytvořili byste ho RunInstallerAttribute a přidali atribut do syntaxe, ale je to instalační nástroj, který ve skutečnosti volá a tedy vytváří instanci třídy.

#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

Poznámky

Funkce ServiceInstaller funguje konkrétně pro službu, ke které je přidružená. Používá ho instalační nástroj k zápisu hodnot registru přidružených ke službě do podklíče v rámci klíče registru HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Služba je identifikována pomocí názvu služby v rámci tohoto podklíče. Podklíč obsahuje také název spustitelného souboru nebo .dll, do kterého služba patří.

Pokud chcete nainstalovat službu, vytvořte třídu instalačního programu projektu, která dědí z Installer třídy, a nastavte RunInstallerAttribute atribut třídy na true. V rámci projektu vytvořte jednu ServiceProcessInstaller instanci pro každou aplikaci služby a jednu ServiceInstaller instanci pro každou službu v aplikaci. V konstruktoru třídy instalačního programu projektu nastavte vlastnosti instalace služby pomocí ServiceProcessInstaller instancí a ServiceInstaller a přidejte instance do Installers kolekce.

Poznámka

Doporučuje se použít konstruktor pro přidání instancí instalačního programu; Pokud však potřebujete přidat do Installers kolekce v Install metodě, nezapomeňte provést stejné přírůstky do kolekce v Uninstall metodě.

Pro všechny třídy odvozené z Installer třídy musí být stav Installers kolekce v Install metodách a Uninstall stejný. Pokud však přidáte instance instalačního programu do Installers kolekce v konstruktoru třídy vlastního instalačního programu, můžete se vyhnout údržbě kolekce napříč Install metodami aUninstall. Při zavolání instalačního nástroje vyhledá RunInstallerAttribute atribut . Pokud je trueatribut , nástroj nainstaluje všechny služby, které byly přidány do Installers kolekce, které byly přidruženy k instalačnímu programu projektu. Pokud RunInstallerAttribute existuje false nebo neexistuje, instalační nástroj ignoruje instalační program projektu.

Třída přidružená ServiceProcessInstaller k instalační třídě projektu instaluje informace společné pro všechny ServiceInstaller instance v projektu. Pokud má tato služba něco, co ji odděluje od ostatních služeb v projektu instalace, je tato metoda nainstalována informace specifické pro službu.

Poznámka

Je důležité, aby byla ServiceName identická s ServiceBase.ServiceName třídou, kterou jste odvozli z ServiceBase. Za normálních ServiceBase.ServiceName okolností je hodnota vlastnosti služby nastavena v rámci funkce Main() spustitelného souboru aplikace služby. Správce řízení služeb používá ServiceInstaller.ServiceName vlastnost k vyhledání služby v tomto spustitelném souboru.

Můžete upravit další vlastnosti ServiceInstaller před nebo po jeho přidání do Installers kolekce instalačního programu projektu. Služba může být například nastavená StartType tak, aby se služba spustila automaticky při restartování, nebo může vyžadovat, aby ji uživatel spustil ručně.

Za normálních okolností nebudete volat metody v ServiceInstaller rámci kódu; jsou obecně volána pouze instalačním nástrojem. Instalační nástroj během procesu instalace automaticky volá ServiceProcessInstaller.Install metody a ServiceInstaller.Install . V případě potřeby zálohuje selhání voláním Rollback (nebo ServiceInstaller.Rollback) u všech dříve nainstalovaných komponent.

Instalační nástroj volá Uninstall k odebrání objektu .

Instalační rutina aplikace udržuje informace o již nainstalovaných komponentách automaticky pomocí instalačního Installer.Contextprogramu projektu . Tyto informace o stavu se průběžně aktualizují jako ServiceProcessInstaller instance a nástroj nainstaluje každou ServiceInstaller instanci. Obvykle není nutné explicitně upravovat informace o stavu v kódu.

Po provedení instalace se automaticky vytvoří pro EventLogInstaller instalaci zdroje protokolu událostí přidruženého k odvozené ServiceBase třídě. Vlastnost Log tohoto zdroje je nastavena ServiceInstaller konstruktorem na aplikační protokol počítače. Když nastavíte ServiceName hodnotu ServiceInstaller (která by měla být identická se ServiceBase.ServiceName službou), Source nastaví se automaticky na stejnou hodnotu. V případě selhání instalace se instalace zdroje vrátí zpět spolu s dříve nainstalovanými službami.

Metoda Uninstall se pokusí zastavit službu, pokud je spuštěná. Bez ohledu na to, jestli je to úspěšné, nebo ne, Uninstall vrátí zpět změny provedené nástrojem Install. Pokud byl pro protokolování událostí vytvořen nový zdroj, zdroj se odstraní.

Konstruktory

ServiceInstaller()

Inicializuje novou instanci ServiceInstaller třídy.

Vlastnosti

CanRaiseEvents

Získá hodnotu označující, zda komponenta může vyvolat událost.

(Zděděno od Component)
Container

Získá objekt IContainer , který obsahuje Component.

(Zděděno od Component)
Context

Získá nebo nastaví informace o aktuální instalaci.

(Zděděno od Installer)
DelayedAutoStart

Získá nebo nastaví hodnotu, která označuje, zda má být služba zpožděna od spuštění, dokud nejsou spuštěny jiné automaticky spuštěné služby.

Description

Získá nebo nastaví popis služby.

DesignMode

Získá hodnotu, která označuje, zda je aktuálně v režimu návrhu Component .

(Zděděno od Component)
DisplayName

Označuje popisný název, který identifikuje službu pro uživatele.

Events

Získá seznam obslužných rutin událostí, které jsou připojeny k tomuto Component.

(Zděděno od Component)
HelpText

Získá text nápovědy pro všechny instalační programy v kolekci instalačního programu.

(Zděděno od Installer)
Installers

Získá kolekci instalačních programů, které tento instalační program obsahuje.

(Zděděno od Installer)
Parent

Získá nebo nastaví instalační program obsahující kolekci, do které patří tento instalační program.

(Zděděno od Installer)
ServiceName

Označuje název, který systém používá k identifikaci této služby. Tato vlastnost musí být identická se ServiceName službou, kterou chcete nainstalovat.

ServicesDependedOn

Označuje služby, které musí být spuštěny, aby se tato služba spustila.

Site

Získá nebo nastaví ISite hodnotu Component.

(Zděděno od Component)
StartType

Určuje, jak a kdy je tato služba spuštěna.

Metody

Commit(IDictionary)

Při přepsání v odvozené třídě dokončí transakci instalace.

(Zděděno od Installer)
CopyFromComponent(IComponent)

Zkopíruje vlastnosti z instance nástroje do tohoto instalačního ServiceBase programu.

CreateObjRef(Type)

Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy používaného ke komunikaci se vzdáleným objektem.

(Zděděno od MarshalByRefObject)
Dispose()

Uvolní všechny prostředky používané nástrojem Component.

(Zděděno od Component)
Dispose(Boolean)

Uvolní nespravované prostředky používané Component nástrojem a volitelně uvolní spravované prostředky.

(Zděděno od Component)
Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetLifetimeService()
Zastaralé.

Načte objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
GetService(Type)

Vrátí objekt, který představuje službu poskytovanou objektem Component nebo jejím Containerobjektem .

(Zděděno od Component)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
InitializeLifetimeService()
Zastaralé.

Získá objekt služby životnosti, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
Install(IDictionary)

Nainstaluje službu zápisem informací o aplikaci služby do registru. Tuto metodu mají používat instalační nástroje, které automaticky zpracovávají příslušné metody.

IsEquivalentInstaller(ComponentInstaller)

Určuje, jestli by dva instalační programy nainstalovaly stejnou službu.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
MemberwiseClone(Boolean)

Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu.

(Zděděno od MarshalByRefObject)
OnAfterInstall(IDictionary)

AfterInstall Vyvolá událost.

(Zděděno od Installer)
OnAfterRollback(IDictionary)

AfterRollback Vyvolá událost.

(Zděděno od Installer)
OnAfterUninstall(IDictionary)

AfterUninstall Vyvolá událost.

(Zděděno od Installer)
OnBeforeInstall(IDictionary)

BeforeInstall Vyvolá událost.

(Zděděno od Installer)
OnBeforeRollback(IDictionary)

BeforeRollback Vyvolá událost.

(Zděděno od Installer)
OnBeforeUninstall(IDictionary)

BeforeUninstall Vyvolá událost.

(Zděděno od Installer)
OnCommitted(IDictionary)

Committed Vyvolá událost.

(Zděděno od Installer)
OnCommitting(IDictionary)

Committing Vyvolá událost.

(Zděděno od Installer)
Rollback(IDictionary)

Vrátí zpět informace o aplikaci služby zapsané do registru instalačním postupem. Tuto metodu mají používat instalační nástroje, které automaticky zpracovávají příslušné metody.

ToString()

String Vrátí hodnotu obsahující název Component, pokud existuje. Tato metoda by neměla být přepsána.

(Zděděno od Component)
Uninstall(IDictionary)

Odinstaluje službu odebráním informací o této službě z registru.

Událost

AfterInstall

Nastane po Install(IDictionary) spuštění metod všech instalačních programů ve Installers vlastnosti.

(Zděděno od Installer)
AfterRollback

Nastane po vrácení instalace všech instalačních programů ve Installers vlastnosti zpět.

(Zděděno od Installer)
AfterUninstall

Nastane poté, co všechny instalační programy ve Installers vlastnosti provedou své operace odinstalace.

(Zděděno od Installer)
BeforeInstall

Nastane před spuštěním Install(IDictionary) metody každého instalačního programu v kolekci instalačního programu.

(Zděděno od Installer)
BeforeRollback

Nastane před vrácením instalačních programů ve Installers vlastnosti zpět.

(Zděděno od Installer)
BeforeUninstall

Nastane před tím, než instalační program ve Installers vlastnosti provede své operace odinstalace.

(Zděděno od Installer)
Committed

Nastane poté, co všechny instalační programy ve Installers vlastnosti potvrdily své instalace.

(Zděděno od Installer)
Committing

Nastane před tím, než instalační programy ve Installers vlastnosti potvrdí své instalace.

(Zděděno od Installer)
Disposed

Nastane, když je komponenta odstraněna voláním Dispose() metody.

(Zděděno od Component)

Platí pro

Viz také