Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase ServiceInstaller

 

Publicado: octubre de 2016

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

Espacio de nombres:   System.ServiceProcess
Ensamblado:  System.ServiceProcess (en System.ServiceProcess.dll)

System.Object
  System.MarshalByRefObject
    System.ComponentModel.Component
      System.Configuration.Install.Installer
        System.Configuration.Install.ComponentInstaller
          System.ServiceProcess.ServiceInstaller

public class ServiceInstaller : ComponentInstaller

NombreDescripción
System_CAPS_pubmethodServiceInstaller()

Inicializa una nueva instancia de la clase ServiceInstaller.

NombreDescripción
System_CAPS_protpropertyCanRaiseEvents

Obtiene un valor que indica si el componente puede provocar un evento.(Heredado de Component).

System_CAPS_pubpropertyContainer

Obtiene IContainer que contiene Component.(Heredado de Component).

System_CAPS_pubpropertyContext

Obtiene o establece información sobre la instalación actual.(Heredado de Installer).

System_CAPS_pubpropertyDelayedAutoStart

Obtiene o establece un valor que indica si el servicio debe retrasar su inicio hasta que otros servicios iniciados automáticamente se están ejecutando.

System_CAPS_pubpropertyDescription

Obtiene o establece la descripción del servicio.

System_CAPS_protpropertyDesignMode

Obtiene un valor que indica si la Component está actualmente en modo de diseño.(Heredado de Component).

System_CAPS_pubpropertyDisplayName

Indica el nombre descriptivo que identifica el servicio al usuario.

System_CAPS_protpropertyEvents

Obtiene la lista de controladores de eventos que se adjuntará a este Component.(Heredado de Component).

System_CAPS_pubpropertyHelpText

Obtiene el texto de ayuda de todos los instaladores que se encuentran en la colección de instaladores.(Heredado de Installer).

System_CAPS_pubpropertyInstallers

Obtiene la colección de instaladores que contiene este instalador.(Heredado de Installer).

System_CAPS_pubpropertyParent

Obtiene o establece el instalador que contiene la colección a la que pertenece este instalador.(Heredado de Installer).

System_CAPS_pubpropertyServiceName

Indica el nombre utilizado por el sistema para identificar este servicio. Esta propiedad debe ser idéntica a la ServiceBase.ServiceName del servicio que desea instalar.

System_CAPS_pubpropertyServicesDependedOn

Indica los servicios que deben estar ejecutándose para que se ejecute este servicio.

System_CAPS_pubpropertySite

Obtiene o establece la ISite de la Component.(Heredado de Component).

System_CAPS_pubpropertyStartType

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

NombreDescripción
System_CAPS_pubmethodCommit(IDictionary)

Cuando se reemplaza en una clase derivada, finaliza la transacción de instalación.(Heredado de Installer).

System_CAPS_pubmethodCopyFromComponent(IComponent)

Copia las propiedades de una instancia de ServiceBase a este instalador.(Invalida ComponentInstaller.CopyFromComponent(IComponent)).

System_CAPS_pubmethodCreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar a un proxy que se utiliza para comunicarse con un objeto remoto.(Heredado de MarshalByRefObject).

System_CAPS_pubmethodDispose()

Libera todos los recursos que usa Component.(Heredado de Component).

System_CAPS_protmethodDispose(Boolean)

Libera los recursos no administrados que usa Component y libera los recursos administrados de forma opcional.(Heredado de Component).

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Libera recursos no administrados y realiza otras operaciones de limpieza antes de que se reclame el elemento Component durante la recolección de elementos no usados.(Heredado de Component).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetLifetimeService()

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

System_CAPS_protmethodGetService(Type)

Devuelve un objeto que representa el servicio suministrado por Component o por Container.(Heredado de Component).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodInitializeLifetimeService()

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.(Heredado de MarshalByRefObject).

System_CAPS_pubmethodInstall(IDictionary)

Instala el servicio escribiendo la información de la aplicación de servicio en el registro. Este método está pensado para usarse con las herramientas de instalación, que procesan los métodos apropiados automáticamente.(Invalida Installer.Install(IDictionary)).

System_CAPS_pubmethodIsEquivalentInstaller(ComponentInstaller)

Indica si dos instaladores pueden instalar el mismo servicio.(Invalida ComponentInstaller.IsEquivalentInstaller(ComponentInstaller)).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_protmethodMemberwiseClone(Boolean)

Crea una copia superficial del elemento actual MarshalByRefObject objeto.(Heredado de MarshalByRefObject).

System_CAPS_protmethodOnAfterInstall(IDictionary)

Genera el evento AfterInstall.(Heredado de Installer).

System_CAPS_protmethodOnAfterRollback(IDictionary)

Genera el evento AfterRollback.(Heredado de Installer).

System_CAPS_protmethodOnAfterUninstall(IDictionary)

Genera el evento AfterUninstall.(Heredado de Installer).

System_CAPS_protmethodOnBeforeInstall(IDictionary)

Genera el evento BeforeInstall.(Heredado de Installer).

System_CAPS_protmethodOnBeforeRollback(IDictionary)

Genera el evento BeforeRollback.(Heredado de Installer).

System_CAPS_protmethodOnBeforeUninstall(IDictionary)

Genera el evento BeforeUninstall.(Heredado de Installer).

System_CAPS_protmethodOnCommitted(IDictionary)

Genera el evento Committed.(Heredado de Installer).

System_CAPS_protmethodOnCommitting(IDictionary)

Genera el evento Committing.(Heredado de Installer).

System_CAPS_pubmethodRollback(IDictionary)

Deshace la información de la aplicación de servicio escribe en el registro mediante el procedimiento de instalación. Este método está pensado para usarse con las herramientas de instalación, que procesan los métodos apropiados automáticamente.(Invalida Installer.Rollback(IDictionary)).

System_CAPS_pubmethodToString()

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

System_CAPS_pubmethodUninstall(IDictionary)

Desinstala el servicio eliminando información sobre él en el registro.(Invalida Installer.Uninstall(IDictionary)).

NombreDescripción
System_CAPS_pubeventAfterInstall

Se produce después de ejecutarse los métodos Install de todos los instaladores de la propiedad Installers.(Heredado de Installer).

System_CAPS_pubeventAfterRollback

Se produce después de deshacerse la instalación de todos los instaladores de la propiedad Installers.(Heredado de Installer).

System_CAPS_pubeventAfterUninstall

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

System_CAPS_pubeventBeforeInstall

Se produce antes de ejecutarse el método Install de cada instalador en la colección de instaladores.(Heredado de Installer).

System_CAPS_pubeventBeforeRollback

Se produce antes de deshacerse los instaladores de la propiedad Installers.(Heredado de Installer).

System_CAPS_pubeventBeforeUninstall

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

System_CAPS_pubeventCommitted

Se produce después de que todos los instaladores de la propiedad Installers confirmen sus instalaciones.(Heredado de Installer).

System_CAPS_pubeventCommitting

Se produce antes de que los instaladores de la propiedad Installers confirmen sus instalaciones.(Heredado de Installer).

System_CAPS_pubeventDisposed

Se produce cuando el componente se elimina mediante una llamada a la Dispose (método).(Heredado de Component).

El ServiceInstaller funciona de forma específica para el servicio al que está asociado. Se utiliza la utilidad de instalación para escribir valores del registro asociados con el servicio a una subclave de la clave de registro HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. El servicio se identifica mediante su propiedad ServiceName dentro de esta subclave. La subclave incluye también el nombre del ejecutable o archivo .dll al que pertenece el servicio.

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

System_CAPS_noteNota

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

Para todas las clases que derivan de la Installer clase, el estado de la Installers colección debe ser el mismo en el Install y Uninstall métodos. Sin embargo, puede evitar el mantenimiento de la colección a través de la Install y Uninstall métodos si se agregan instancias del instalador para el Installers colección en el constructor de clase de 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 que estaban asociados al instalador del proyecto. Si RunInstallerAttribute es false o existe, la utilidad de instalación omite el instalador del proyecto.

El ServiceProcessInstaller asociado a su proyecto instalación clase instala información común a todos los ServiceInstaller instancias en el proyecto. Si este servicio tiene algo que lo diferencia de los demás servicios del proyecto de instalación, se instala esa información específica del servicio de este método.

System_CAPS_noteNota

Es crucial que la ServiceName sea idéntica a la ServiceBase.ServiceName de la clase derivada de ServiceBase. Normalmente, el valor de la ServiceBase.ServiceName se establece la propiedad para el servicio dentro de la función Main() del ejecutable de la aplicación de servicio. El Administrador de Control de servicios usa el ServiceInstaller.ServiceName propiedad para buscar el servicio en este ejecutable.

Puede modificar otras propiedades en el ServiceInstaller ya sea antes o después de agregarlo a la Installers colección del instalador del proyecto. Por ejemplo, un servicio StartType puede establecerse para iniciar el servicio automáticamente al reiniciar o necesita un usuario iniciar el servicio manualmente.

Normalmente, no llamará los métodos en ServiceInstaller dentro del código; se denominan generalmente sólo desde la utilidad de instalación. La utilidad de instalación llama automáticamente a la ServiceProcessInstaller.Install y ServiceInstaller.Install métodos durante el proceso de instalación. Deshace los errores, si es necesario, mediante una llamada a Rollback (o ServiceInstaller.Rollback) en todos los componentes instalados anteriormente.

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

La rutina de instalación de la aplicación mantiene información automáticamente acerca de los componentes ya instalados, mediante el instalador de proyecto Installer.Context. Esta información de estado se actualiza continuamente en el ServiceProcessInstaller instancia y cada ServiceInstaller la utilidad instala la instancia. Normalmente no es necesario para el código modificar información de estado de forma explícita.

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

El Uninstall método intenta detener el servicio si se está ejecutando. Si 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.

En el ejemplo siguiente se crea un instalador del 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". En el constructor de MyProjectInstaller (que llamaría la utilidad de instalación), ServiceInstaller se crean objetos para cada uno de estos servicios y un ServiceProcessInstaller para el ejecutable. La utilidad de instalación reconozca MyProjectInstaller como un instalador válido, el RunInstallerAttribute está establecido en true.

Propiedades opcionales se establecen en el instalador del proceso y los instaladores del servicio antes de que los instaladores se agreguen a la Installers recopilación. Cuando obtiene acceso la utilidad de instalación MyProjectInstaller, los objetos agregados a la Installers la colección mediante una llamada a InstallerCollection.Add se instalan. Durante el proceso, el instalador mantiene información de estado que indica qué objetos se han instalado, por lo que cada uno puede descartarse a su vez, si se produce un error de instalación.

Normalmente, no debería crear explícitamente una instancia de la clase de instalador del proyecto. ¿Cree y agregue el RunInstallerAttribute a la sintaxis de atributo, pero es la utilidad de instalación que en realidad llama y, por tanto, la clase, crea una instancia.

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]");
    }
}

.NET Framework
Disponible desde 1.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: