ServiceInstaller Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Instala uma classe que se estende ServiceBase para implementar um serviço. Essa classe é chamada pelo utilitário de instalação ao instalar um aplicativo 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 a seguir cria um instalador de projeto, chamado MyProjectInstaller, que herda de Installer. Supõe-se que há um executável de serviço que contém dois serviços, "Hello-World Service 1" e "Hello-World Service 2". Dentro do construtor para MyProjectInstaller (que seria chamado pelo utilitário de instalação), ServiceInstaller os objetos são criados para cada um desses serviços e um ServiceProcessInstaller é criado para o executável. Para o utilitário de instalação reconhecer MyProjectInstaller como um instalador válido, o RunInstallerAttribute atributo é definido truecomo .
As propriedades opcionais são definidas no instalador do processo e nos instaladores de serviço antes que os instaladores sejam adicionados à Installers coleção. Quando o utilitário de instalação for acessado MyProjectInstaller, os objetos adicionados à Installers coleção por meio de uma chamada serão InstallerCollection.Add instalados por sua vez. Durante o processo, o instalador mantém informações de estado indicando quais objetos foram instalados, para que cada um possa ser retirado, por sua vez, se ocorrer uma falha de instalação.
Normalmente, você não criaria uma instância da classe do instalador de projeto explicitamente. Você o criaria e adicionaria o RunInstallerAttribute atributo à sintaxe, mas é o utilitário de instalação que realmente chama e, portanto, 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
Comentários
O ServiceInstaller trabalho funciona específico ao serviço ao qual ele está associado. Ele é usado pelo utilitário de instalação para gravar valores de registro associados ao serviço em uma subchave dentro da chave do registro HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. O serviço é identificado por seu ServiceName nessa subchave. A subchave também inclui 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 herda da Installer classe e defina o RunInstallerAttribute atributo na classe como true. Em seu projeto, crie uma ServiceProcessInstaller instância por aplicativo de serviço e uma ServiceInstaller instância para cada serviço no aplicativo. No construtor da classe do instalador de projeto, defina as propriedades de instalação do serviço usando as ServiceProcessInstaller instâncias e ServiceInstaller as instâncias e adicione as instâncias à Installers coleção.
Observação
É recomendável que você use o construtor para adicionar instâncias do instalador; no entanto, se você precisar adicionar à Installers coleção no Install método, certifique-se de executar 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 métodos e Uninstall nos Install métodos. No entanto, você pode evitar a manutenção da coleção entre os Install métodos e Uninstall se adicionar instâncias do Installers instalador à coleção no construtor de classe do instalador personalizado. Quando o utilitário de instalação é chamado, ele procura o RunInstallerAttribute atributo. Se o atributo for true, o utilitário instalará todos os serviços que foram adicionados à Installers coleção associada ao instalador do projeto. Se RunInstallerAttribute existir false ou não, o utilitário de instalação ignorará o instalador do projeto.
A ServiceProcessInstaller classe de instalação associada ao projeto instala informações comuns a todas as ServiceInstaller instâncias do projeto. Se esse serviço tiver algo que o separe dos outros serviços no projeto de instalação, essas informações específicas do serviço serão instaladas por esse método.
Observação
É crucial que seja ServiceName idêntico à ServiceBase.ServiceName classe da ServiceBasequal você deriva. Normalmente, o valor da ServiceBase.ServiceName propriedade para o serviço é definido dentro da função Main() do executável do aplicativo de serviço. O Service Control Manager usa a ServiceInstaller.ServiceName propriedade para localizar o serviço dentro desse executável.
Você pode modificar outras propriedades no ServiceInstaller antes ou depois de adicioná-las à Installers coleção do instalador do projeto. Por exemplo, um serviço StartType pode ser definido para iniciar o serviço automaticamente na reinicialização ou exigir que um usuário inicie o serviço manualmente.
Normalmente, você não chamará os métodos em ServiceInstaller seu código; eles geralmente são chamados apenas pelo utilitário de instalação. O utilitário de instalação chama automaticamente os métodos e ServiceInstaller.Install os ServiceProcessInstaller.Install métodos durante o processo de instalação. Ele faz backup de falhas, se necessário, chamando Rollback (ou ServiceInstaller.Rollback) em todos os componentes instalados anteriormente.
O utilitário de instalação chama Uninstall para remover o objeto.
A rotina de instalação de um aplicativo mantém informações automaticamente sobre os componentes já instalados, usando o instalador do Installer.Contextprojeto. Essas informações de estado são atualizadas continuamente como a ServiceProcessInstaller instância e cada ServiceInstaller instância é instalada pelo utilitário. Geralmente, é desnecessário que seu código modifique explicitamente as informações de estado.
Quando a instalação é executada, ela cria automaticamente uma EventLogInstaller fonte de log de eventos associada à ServiceBase classe derivada. A Log propriedade dessa origem é definida pelo ServiceInstaller construtor para o log de aplicativos do computador. Quando você define o ServiceName ( ServiceInstaller que deve ser idêntico ao ServiceBase.ServiceName do serviço), ele Source é automaticamente definido como o mesmo valor. Em uma falha de instalação, a instalação da origem é revertida juntamente com os serviços instalados anteriormente.
O Uninstall método tentará interromper o serviço se ele estiver em execução. Se isso for bem-sucedido ou não, Uninstall desfaça as alterações feitas por Install. Se uma nova fonte tiver sido criada para o registro em log de eventos, a origem será excluída.
Construtores
| Nome | Description |
|---|---|
| ServiceInstaller() |
Inicializa uma nova instância da classe ServiceInstaller. |
Propriedades
| Nome | 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 |
Obtém ou define um valor que indica se o serviço deve ser adiado da inicialização até que outros serviços iniciados automaticamente estejam em execução. |
| Description |
Obtém ou define a descrição do serviço. |
| DesignMode |
Obtém um valor que indica se o Component está no modo de design no momento. (Herdado de Component) |
| DisplayName |
Indica o nome amigável que identifica o serviço para o usuário. |
| Events |
Obtém a lista de manipuladores de eventos anexados a isso Component. (Herdado de Component) |
| HelpText |
Obtém o texto de ajuda para todos os instaladores na coleção do instalador. (Herdado de Installer) |
| Installers |
Obtém 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 à qual este instalador pertence. (Herdado de Installer) |
| ServiceName |
Indica o nome usado pelo sistema para identificar esse serviço. Essa propriedade deve ser idêntica ao ServiceName serviço que você deseja instalar. |
| ServicesDependedOn |
Indica os serviços que devem estar em execução para que esse serviço seja executado. |
| Site |
Obtém ou define o ISiteComponent. (Herdado de Component) |
| StartType |
Indica como e quando esse serviço é iniciado. |
Métodos
| Nome | Description |
|---|---|
| Commit(IDictionary) |
Quando substituído em uma classe derivada, conclui a transação de instalação. (Herdado de Installer) |
| CopyFromComponent(IComponent) |
Copia as propriedades de uma instância desse ServiceBase instalador. |
| CreateObjRef(Type) |
Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto. (Herdado de MarshalByRefObject) |
| Dispose() |
Libera todos os recursos usados pelo Component. (Herdado de Component) |
| Dispose(Boolean) |
Libera os recursos não gerenciados usados pelo Component e, opcionalmente, libera os recursos gerenciados. (Herdado de Component) |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
| GetLifetimeService() |
Obsoleto.
Recupera o objeto de serviço de tempo de vida atual que controla a política de tempo de vida para essa instância. (Herdado de MarshalByRefObject) |
| GetService(Type) |
Retorna um objeto que representa um serviço fornecido pelo Component ou por sua Container. (Herdado de Component) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| InitializeLifetimeService() |
Obsoleto.
Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida dessa instância. (Herdado de MarshalByRefObject) |
| Install(IDictionary) |
Instala o serviço gravando informações do aplicativo de serviço no registro. Esse método deve ser usado pelas ferramentas de instalação, que processam os métodos apropriados automaticamente. |
| IsEquivalentInstaller(ComponentInstaller) |
Indica se dois instaladores instalariam o mesmo serviço. |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| MemberwiseClone(Boolean) |
Cria uma cópia superficial do objeto atual MarshalByRefObject . (Herdado de MarshalByRefObject) |
| OnAfterInstall(IDictionary) |
Aciona o evento AfterInstall. (Herdado de Installer) |
| OnAfterRollback(IDictionary) |
Aciona o evento AfterRollback. (Herdado de Installer) |
| OnAfterUninstall(IDictionary) |
Aciona o evento AfterUninstall. (Herdado de Installer) |
| OnBeforeInstall(IDictionary) |
Aciona o evento BeforeInstall. (Herdado de Installer) |
| OnBeforeRollback(IDictionary) |
Aciona o evento BeforeRollback. (Herdado de Installer) |
| OnBeforeUninstall(IDictionary) |
Aciona o evento BeforeUninstall. (Herdado de Installer) |
| OnCommitted(IDictionary) |
Aciona o evento Committed. (Herdado de Installer) |
| OnCommitting(IDictionary) |
Aciona o evento Committing. (Herdado de Installer) |
| Rollback(IDictionary) |
Reverte as informações do aplicativo de serviço gravadas no registro pelo procedimento de instalação. Esse método deve ser usado pelas ferramentas de instalação, que processam os métodos apropriados automaticamente. |
| ToString() |
Retorna um String que contém o nome do Component, se houver. Esse método não deve ser substituído. (Herdado de Component) |
| Uninstall(IDictionary) |
Desinstala o serviço removendo informações sobre ele do registro. |
Eventos
| Nome | Description |
|---|---|
| AfterInstall |
Ocorre depois que os Install(IDictionary) métodos de todos os instaladores na Installers propriedade são executados. (Herdado de Installer) |
| AfterRollback |
Ocorre depois que as instalações de todos os instaladores na Installers propriedade são revertidas. (Herdado de Installer) |
| AfterUninstall |
Ocorre depois que todos os instaladores na Installers propriedade executam suas operações de desinstalação. (Herdado de Installer) |
| BeforeInstall |
Ocorre antes da execução do Install(IDictionary) método de cada instalador na coleção do instalador. (Herdado de Installer) |
| BeforeRollback |
Ocorre antes que os instaladores na Installers propriedade sejam revertidos. (Herdado de Installer) |
| BeforeUninstall |
Ocorre antes que os instaladores na Installers propriedade executem suas operações de desinstalação. (Herdado de Installer) |
| Committed |
Ocorre depois que todos os instaladores na Installers propriedade confirmam suas instalações. (Herdado de Installer) |
| Committing |
Ocorre antes que os instaladores na Installers propriedade confirmem suas instalações. (Herdado de Installer) |
| Disposed |
Ocorre quando o componente é descartado por uma chamada para o Dispose() método. (Herdado de Component) |