Compartir a través de


ServiceInstaller Clase

Definición

Instala una clase que se ServiceBase extiende para implementar un servicio. La utilidad de instalación llama a esta clase al instalar una aplicación de servicio.

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
Herencia

Ejemplos

En el ejemplo siguiente se crea un instalador de proyecto, denominado MyProjectInstaller, que hereda de Installer. Se supone que hay un ejecutable de servicio que contiene dos servicios: "Hello-World Service 1" y "Hello-World Service 2". Dentro del constructor para MyProjectInstaller (al que llamaría la utilidad de instalación), ServiceInstaller se crean objetos para cada uno de estos servicios y se crea un ServiceProcessInstaller para el ejecutable. Para que la utilidad de instalación reconozca MyProjectInstaller como un instalador válido, el RunInstallerAttribute atributo se establece en true.

Las propiedades opcionales se establecen en el instalador de proceso y los instaladores de servicio antes de agregar los instaladores a la Installers colección. Cuando la utilidad de instalación tiene acceso a , los objetos agregados MyProjectInstallera la Installers colección a través de una llamada a InstallerCollection.Add se instalarán a su vez. Durante el proceso, el instalador mantiene información de estado que indica qué objetos se han instalado, por lo que cada uno se puede revertir a su vez, si se produce un error de instalación.

Normalmente, no crearía una instancia de la clase del instalador del proyecto explícitamente. Lo crearía y agregaría el RunInstallerAttribute atributo a la sintaxis, pero es la utilidad de instalación que realmente llama a y, por tanto, crea instancias de la clase .

#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

Comentarios

ServiceInstaller hace trabajo específico del servicio con el que está asociado. La utilidad de instalación la usa para escribir valores del Registro asociados al servicio en una subclave dentro de la clave del Registro HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. El servicio se identifica mediante su ServiceName dentro de esta subclave. La subclave también incluye el nombre del archivo ejecutable o .dll al que pertenece el servicio.

Para instalar un servicio, cree una clase de instalador de proyecto que herede de la Installer clase y establezca el RunInstallerAttribute atributo en la clase trueen . En el proyecto, cree una ServiceProcessInstaller instancia por aplicación de servicio y una ServiceInstaller instancia para cada servicio de la aplicación. En el constructor de clase del instalador del proyecto, establezca las propiedades de instalación para el servicio mediante las ServiceProcessInstaller instancias y ServiceInstaller y agregue las instancias a la Installers colección.

Nota:

Se recomienda usar el constructor para agregar instancias del instalador; Sin embargo, si necesita agregar a la Installers colección en el Install método , asegúrese de realizar las mismas adiciones a la colección en el Uninstall método .

Para todas las clases derivadas de la Installer clase , el estado de la Installers colección debe ser el mismo en los Install métodos y Uninstall . Sin embargo, puede evitar el mantenimiento de la colección entre los Install métodos y Uninstall si agrega instancias del instalador a la colección en el Installers constructor de clase del instalador personalizado. Cuando se llama a la utilidad de instalación, busca el RunInstallerAttribute atributo . Si el atributo es true, la utilidad instala todos los servicios que se agregaron a la Installers colección asociada al instalador del proyecto. Si RunInstallerAttribute es false o no existe, la utilidad de instalación omite el instalador del proyecto.

El ServiceProcessInstaller asociado a la clase de instalación del proyecto instala información común a todas las ServiceInstaller instancias del proyecto. Si este servicio tiene algo que lo separa de los otros servicios del proyecto de instalación, este método instala esa información específica del servicio.

Nota:

Es fundamental que sea ServiceName idéntico al ServiceBase.ServiceName de la clase derivada de ServiceBase. Normalmente, el valor de la ServiceBase.ServiceName propiedad del servicio se establece dentro de la función Main() del ejecutable de la aplicación de servicio. Service Control Manager usa la ServiceInstaller.ServiceName propiedad para localizar el servicio dentro de este ejecutable.

Puede modificar otras propiedades en el ServiceInstaller elemento anterior o después de agregarlo a la Installers colección del instalador del proyecto. Por ejemplo, los servicios StartType pueden establecerse para iniciar el servicio automáticamente al reiniciar o requerir que un usuario inicie el servicio manualmente.

Normalmente, no llamará a los métodos en ServiceInstaller el código; por lo general, la utilidad de instalación los llama únicamente. La utilidad de instalación llama automáticamente a los ServiceProcessInstaller.Install métodos y ServiceInstaller.Install durante el proceso de instalación. Devuelve errores, si es necesario, llamando a Rollback (o ServiceInstaller.Rollback) en todos los componentes instalados anteriormente.

La utilidad de instalación llama Uninstall a para quitar el objeto .

La rutina de instalación de una aplicación mantiene información automáticamente sobre los componentes ya instalados mediante el instalador del Installer.Contextproyecto. Esta información de estado se actualiza continuamente como la ServiceProcessInstaller instancia y la utilidad instala cada ServiceInstaller instancia. Normalmente no es necesario que el código modifique la información de estado explícitamente.

Cuando se realiza la instalación, crea automáticamente un EventLogInstaller para instalar el origen del registro de eventos asociado a la ServiceBase clase derivada. El Log constructor establece la ServiceInstaller propiedad de este origen en el registro de aplicación del equipo. Cuando se establece el ServiceName de ServiceInstaller (que debe ser idéntico al ServiceBase.ServiceName del servicio), se Source establece automáticamente en el mismo valor. En un error de instalación, la instalación del origen se revierte junto con los servicios instalados anteriormente.

El Uninstall método intenta detener el servicio si se está ejecutando. Si esto se realiza correctamente o no, Uninstall deshace los cambios realizados por Install. Si se creó un nuevo origen para el registro de eventos, se elimina el origen.

Constructores

Nombre Description
ServiceInstaller()

Inicializa una nueva instancia de la clase ServiceInstaller.

Propiedades

Nombre Description
CanRaiseEvents

Obtiene un valor que indica si el componente puede generar un evento.

(Heredado de Component)
Container

Obtiene el IContainer objeto que contiene el Componentobjeto .

(Heredado de Component)
Context

Obtiene o establece información sobre la instalación actual.

(Heredado de Installer)
DelayedAutoStart

Obtiene o establece un valor que indica si se debe retrasar el inicio del servicio hasta que se ejecuten otros servicios iniciados automáticamente.

Description

Obtiene o establece la descripción del servicio.

DesignMode

Obtiene un valor que indica si Component el objeto está actualmente en modo de diseño.

(Heredado de Component)
DisplayName

Indica el nombre descriptivo que identifica el servicio al usuario.

Events

Obtiene la lista de controladores de eventos que están asociados a este Componentobjeto .

(Heredado de Component)
HelpText

Obtiene el texto de ayuda de todos los instaladores de la colección del instalador.

(Heredado de Installer)
Installers

Obtiene la colección de instaladores que contiene este instalador.

(Heredado de Installer)
Parent

Obtiene o establece el instalador que contiene la colección a la que pertenece este instalador.

(Heredado de Installer)
ServiceName

Indica el nombre usado por el sistema para identificar este servicio. Esta propiedad debe ser idéntica al ServiceName del servicio que desea instalar.

ServicesDependedOn

Indica los servicios que deben ejecutarse para que se ejecute este servicio.

Site

Obtiene o establece el ISite objeto de .Component

(Heredado de Component)
StartType

Indica cómo y cuándo se inicia este servicio.

Métodos

Nombre Description
Commit(IDictionary)

Cuando se invalida en una clase derivada, completa la transacción de instalación.

(Heredado de Installer)
CopyFromComponent(IComponent)

Copia las propiedades de una instancia de ServiceBase en este instalador.

CreateObjRef(Type)

Crea un objeto que contiene toda la información pertinente necesaria para generar un proxy usado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
Dispose()

Libera todos los recursos usados por .Component

(Heredado de Component)
Dispose(Boolean)

Libera los recursos no administrados utilizados por Component y, opcionalmente, libera los recursos administrados.

(Heredado de Component)
Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
GetService(Type)

Devuelve un objeto que representa un servicio proporcionado por Component o por su Container.

(Heredado de Component)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
InitializeLifetimeService()
Obsoletos.

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
Install(IDictionary)

Instala el servicio escribiendo información de la aplicación de servicio en el Registro. Este método está diseñado para ser utilizado por las herramientas de instalación, que procesan automáticamente los métodos adecuados.

IsEquivalentInstaller(ComponentInstaller)

Indica si dos instaladores instalarían el mismo servicio.

MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto actual MarshalByRefObject .

(Heredado de MarshalByRefObject)
OnAfterInstall(IDictionary)

Genera el evento AfterInstall.

(Heredado de Installer)
OnAfterRollback(IDictionary)

Genera el evento AfterRollback.

(Heredado de Installer)
OnAfterUninstall(IDictionary)

Genera el evento AfterUninstall.

(Heredado de Installer)
OnBeforeInstall(IDictionary)

Genera el evento BeforeInstall.

(Heredado de Installer)
OnBeforeRollback(IDictionary)

Genera el evento BeforeRollback.

(Heredado de Installer)
OnBeforeUninstall(IDictionary)

Genera el evento BeforeUninstall.

(Heredado de Installer)
OnCommitted(IDictionary)

Genera el evento Committed.

(Heredado de Installer)
OnCommitting(IDictionary)

Genera el evento Committing.

(Heredado de Installer)
Rollback(IDictionary)

Revierte la información de la aplicación de servicio escrita en el Registro mediante el procedimiento de instalación. Este método está diseñado para ser utilizado por las herramientas de instalación, que procesan automáticamente los métodos adecuados.

ToString()

Devuelve un String objeto que contiene el nombre de Component, si existe. Este método no se debe invalidar.

(Heredado de Component)
Uninstall(IDictionary)

Desinstala el servicio quitando información sobre él del Registro.

Eventos

Nombre Description
AfterInstall

Se produce después de ejecutar los Install(IDictionary) métodos de todos los instaladores de la Installers propiedad .

(Heredado de Installer)
AfterRollback

Se produce después de revertir las instalaciones de todos los instaladores de la Installers propiedad.

(Heredado de Installer)
AfterUninstall

Se produce después de que todos los instaladores de la Installers propiedad realicen sus operaciones de desinstalación.

(Heredado de Installer)
BeforeInstall

Se produce antes de que se haya ejecutado el Install(IDictionary) método de cada instalador de la colección del instalador.

(Heredado de Installer)
BeforeRollback

Se produce antes de que los instaladores de la Installers propiedad se revierten.

(Heredado de Installer)
BeforeUninstall

Se produce antes de que los instaladores de la Installers propiedad realicen sus operaciones de desinstalación.

(Heredado de Installer)
Committed

Se produce después de que todos los instaladores de la Installers propiedad hayan confirmado sus instalaciones.

(Heredado de Installer)
Committing

Se produce antes de que los instaladores de la Installers propiedad confirmen sus instalaciones.

(Heredado de Installer)
Disposed

Se produce cuando el componente se elimina mediante una llamada al Dispose() método .

(Heredado de Component)

Se aplica a

Consulte también