ServiceInstaller Classe

Definição

Instala uma classe que se estende ServiceBase para implementar um serviço. Esta classe é chamada pela utilidade de instalação ao instalar uma aplicação de serviço.

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
Herança

Exemplos

O exemplo seguinte cria um instalador de projeto, chamado MyProjectInstaller, que herda de Installer. Assume-se que existe um executável de serviço que contém dois serviços, "Hello-World Serviço 1" e "Hello-World Serviço 2". Dentro do construtor para MyProjectInstaller (que seria chamado pela utilidade de instalação), ServiceInstaller são criados objetos para cada um destes serviços, e a ServiceProcessInstaller é criado para o executável. Para que a utilidade de instalação seja reconhecida MyProjectInstaller como instaladora válida, o RunInstallerAttribute atributo é definido como true.

As propriedades opcionais são definidas no instalador do processo e nos instaladores de serviço antes de estes serem adicionados à Installers coleção. Quando a utilidade de instalação acede MyProjectInstaller, os objetos adicionados à Installers coleção através de uma chamada a InstallerCollection.Add serão instalados por sua vez. Durante o processo, o instalador mantém informações de estado indicando quais os objetos instalados, para que cada um possa ser retirado por sua vez, caso ocorra uma falha na instalação.

Normalmente, não criaria explicitamente uma instância da sua classe de instalador de projeto. Criarias e adicionarias o RunInstallerAttribute atributo à sintaxe, mas é a utilidade de instalação que realmente chama, e por isso instancia, a classe.

#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

Observações

O ServiceInstaller trabalho é específico para o serviço com que está associado. É utilizado pela utilidade de instalação para escrever valores de registo associados ao serviço numa subchave dentro da chave de registo HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. O serviço é identificado pelo seu Nome de Serviço dentro desta subchave. A subchave inclui também o nome do executável ou .dll ao qual o serviço pertence.

Para instalar um serviço, crie uma classe de instalador de projeto que herde da Installer classe e defina o RunInstallerAttribute atributo da classe para true. No seu projeto, crie uma ServiceProcessInstaller instância por aplicação de serviço e uma ServiceInstaller instância para cada serviço da aplicação. Dentro do construtor de classe instalador do projeto, defina as propriedades de instalação do serviço usando as ServiceProcessInstaller instâncias e ServiceInstaller adicione as instâncias à Installers coleção.

Note

Recomenda-se que utilize o construtor para adicionar instâncias de instalador; No entanto, se precisares de acrescentar à Installers coleção no Install método, certifica-te de fazer as mesmas adições à coleção no Uninstall método.

Para todas as classes derivadas da Installer classe, o estado da Installers coleção deve ser o mesmo nos Install métodos e Uninstall . No entanto, pode evitar a manutenção da coleção ao longo dos Install métodos e Uninstall se adicionar instâncias de instalador à Installers coleção no seu construtor de classes instaladoras personalizadas. Quando a ferramenta de instalação é chamada, procura o RunInstallerAttribute atributo. Se o atributo for true, a utilidade instala todos os serviços que foram adicionados à Installers coleção e que estavam associados ao instalador do seu projeto. Se RunInstallerAttribute existir false ou não, a utilidade de instalação ignora o instalador do projeto.

A ServiceProcessInstaller classe de instalação associada ao seu projeto fornece informações comuns a todas ServiceInstaller as instâncias do projeto. Se este serviço tiver algo que o diferencie dos outros serviços no projeto de instalação, essa informação específica do serviço é instalada por este método.

Note

É crucial que sejam ServiceName idênticos à ServiceBase.ServiceName classe da qual ServiceBasederivaste. Normalmente, o valor da ServiceBase.ServiceName propriedade do serviço é definido dentro da função Main() do executável da aplicação de serviço. O Service Control Manager utiliza a ServiceInstaller.ServiceName propriedade para localizar o serviço dentro deste executável.

Pode modificar outras propriedades ServiceInstaller antes ou depois de o adicionar à Installers coleção do seu instalador de projeto. Por exemplo, o StartType serviço pode ser configurado para iniciar o serviço automaticamente no reinício ou exigir que o utilizador inicie o serviço manualmente.

Normalmente, não vais chamar os métodos no ServiceInstaller teu código; geralmente são chamados apenas pela ferramenta de instalação. A ferramenta de instalação chama automaticamente os ServiceProcessInstaller.Install métodos e ServiceInstaller.Install durante o processo de instalação. Compensa falhas, se necessário, ao chamar Rollback (ou ServiceInstaller.Rollback) todos os componentes previamente instalados.

A utilidade de instalação pede Uninstall para remover o objeto.

A rotina de instalação de uma aplicação mantém automaticamente informações sobre os componentes já instalados, usando o arquivo do Installer.Contextinstalador do projeto Esta informação de estado é continuamente atualizada como a ServiceProcessInstaller instância, e cada ServiceInstaller instância é instalada pela utilidade. Normalmente não é necessário que o seu código modifique explicitamente a informação do estado.

Quando a instalação é realizada, cria-se automaticamente um EventLogInstaller para instalar a fonte do registo de eventos associada à ServiceBase classe derivada. A Log propriedade para esta fonte é definida pelo ServiceInstaller construtor para o registo de aplicações do computador. Quando defines o ServiceName do ServiceInstaller (que deve ser idêntico ao ServiceBase.ServiceName do serviço), o Source é automaticamente definido para o mesmo valor. Numa falha de instalação, a instalação do código-fonte é revertida juntamente com os serviços previamente instalados.

O Uninstall método tenta parar o serviço se este estiver a funcionar. Quer isto tenha sucesso ou não, Uninstall desfaz as alterações feitas por Install. Se foi criada uma nova fonte para registo de eventos, a fonte é eliminada.

Construtores

Name Description
ServiceInstaller()

Inicializa uma nova instância da ServiceInstaller classe.

Propriedades

Name Description
CanRaiseEvents

Obtém um valor que indica se o componente pode gerar um evento.

(Herdado de Component)
Container

Obtém o IContainer que contém o Component.

(Herdado de Component)
Context

Obtém ou define informações sobre a instalação atual.

(Herdado de Installer)
DelayedAutoStart

Recebe ou define um valor que indica se o serviço deve ser adiado desde o início até que outros serviços iniciados automaticamente estejam a funcionar.

Description

Obtém ou define a descrição do serviço.

DesignMode

Obtém um valor que indica se o Component está atualmente em modo de design.

(Herdado de Component)
DisplayName

Indica o nome amigável que identifica o serviço para o utilizador.

Events

Obtém a lista de gestores de eventos que estão ligados a isto Component.

(Herdado de Component)
HelpText

Recebe o texto de ajuda para todos os instaladores na coleção de instaladores.

(Herdado de Installer)
Installers

Fica com a coleção de instaladores que este instalador contém.

(Herdado de Installer)
Parent

Obtém ou define o instalador que contém a coleção a que este instalador pertence.

(Herdado de Installer)
ServiceName

Indica o nome usado pelo sistema para identificar este serviço. Esta propriedade deve ser idêntica à ServiceName do serviço que pretende instalar.

ServicesDependedOn

Indica os serviços que devem estar a funcionar para que este serviço funcione.

Site

Obtém ou define o ISite do Component.

(Herdado de Component)
StartType

Indica como e quando este serviço é iniciado.

Métodos

Name Description
Commit(IDictionary)

Quando é sobreposto numa classe derivada, completa a transação de instalação.

(Herdado de Installer)
CopyFromComponent(IComponent)

Copia propriedades de uma instância de ServiceBase para este instalador.

CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Dispose()

Liberta todos os recursos utilizados pelo Component.

(Herdado de Component)
Dispose(Boolean)

Liberta os recursos não geridos usados pelo Component e opcionalmente liberta os recursos geridos.

(Herdado de Component)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetService(Type)

Devolve um objeto que representa um serviço fornecido pelo Component ou pelo seu Container.

(Herdado de Component)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
Install(IDictionary)

Instala o serviço escrevendo as informações da aplicação do serviço no registo. Este método destina-se a ser utilizado por ferramentas de instalação, que processam automaticamente os métodos apropriados.

IsEquivalentInstaller(ComponentInstaller)

Indica se dois instaladores iriam instalar o mesmo serviço.

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
OnAfterInstall(IDictionary)

Eleva o AfterInstall evento.

(Herdado de Installer)
OnAfterRollback(IDictionary)

Eleva o AfterRollback evento.

(Herdado de Installer)
OnAfterUninstall(IDictionary)

Eleva o AfterUninstall evento.

(Herdado de Installer)
OnBeforeInstall(IDictionary)

Eleva o BeforeInstall evento.

(Herdado de Installer)
OnBeforeRollback(IDictionary)

Eleva o BeforeRollback evento.

(Herdado de Installer)
OnBeforeUninstall(IDictionary)

Eleva o BeforeUninstall evento.

(Herdado de Installer)
OnCommitted(IDictionary)

Eleva o Committed evento.

(Herdado de Installer)
OnCommitting(IDictionary)

Eleva o Committing evento.

(Herdado de Installer)
Rollback(IDictionary)

Reverte a informação da aplicação de serviço escrita no registo pelo procedimento de instalação. Este método destina-se a ser utilizado por ferramentas de instalação, que processam automaticamente os métodos apropriados.

ToString()

Devolve a String contendo o nome do Component, se existir. Este método não deve ser ultrapassado.

(Herdado de Component)
Uninstall(IDictionary)

Desinstala o serviço removendo informações sobre ele do registo.

evento

Name Description
AfterInstall

Acontece depois de os Install(IDictionary) métodos de todos os instaladores da Installers propriedade terem sido executados.

(Herdado de Installer)
AfterRollback

Acontece depois de as instalações de todos os instaladores Installers na propriedade serem revertidas.

(Herdado de Installer)
AfterUninstall

Ocorre depois de todos os instaladores da propriedade realizarem Installers as operações de desinstalação.

(Herdado de Installer)
BeforeInstall

Ocorre antes de o Install(IDictionary) método de cada instalador na coleção de instaladores ter sido executado.

(Herdado de Installer)
BeforeRollback

Acontece antes de os instaladores Installers da propriedade serem recuados.

(Herdado de Installer)
BeforeUninstall

Ocorre antes de os instaladores Installers da propriedade realizarem as operações de desinstalação.

(Herdado de Installer)
Committed

Acontece depois de todos os instaladores Installers da propriedade terem concluído as suas instalações.

(Herdado de Installer)
Committing

Ocorre antes de os instaladores Installers da propriedade realizarem as instalações.

(Herdado de Installer)
Disposed

Ocorre quando o componente é eliminado por uma chamada ao Dispose() método.

(Herdado de Component)

Aplica-se a

Ver também