ServiceInstaller Clase

Definición

Instala una clase que extiende ServiceBase para implementar un servicio.Installs a class that extends ServiceBase to implement a service. La utilidad de instalación llama a esta clase al instalar una aplicación de servicio.This class is called by the install utility when installing a service application.

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 MyProjectInstallerproyecto, denominado, que Installerhereda de.The following example creates a project installer, called MyProjectInstaller, which inherits from Installer. Se supone que hay un ejecutable de servicio que contiene dos servicios: "Hello-World Service 1" y "Hello-World Service 2".It is assumed there is a service executable that contains two services, "Hello-World Service 1" and "Hello-World Service 2". En el constructor de MyProjectInstaller (al que llamaría la utilidad de instalación), ServiceInstaller se crean objetos para cada uno de ServiceProcessInstaller estos servicios y se crea para el ejecutable.Within the constructor for MyProjectInstaller (which would be called by the install utility), ServiceInstaller objects are created for each of these services, and a ServiceProcessInstaller is created for the executable. Para que la utilidad de instalación MyProjectInstaller reconozca como un instalador válido RunInstallerAttribute , el atributo se trueestablece en.For the install utility to recognize MyProjectInstaller as a valid installer, the RunInstallerAttribute attribute is set to true.

Las propiedades opcionales se establecen en el instalador de proceso y los instaladores de servicio antes de que los instaladores se agreguen a la Installers colección.Optional properties are set on the process installer and the service installers before the installers are added to the Installers collection. Cuando se tiene acceso MyProjectInstallera la utilidad de instalación, los objetos agregados a la Installers colección InstallerCollection.Add a través de una llamada a se instalarán a su vez.When the install utility accesses MyProjectInstaller, the objects added to the Installers collection through a call to InstallerCollection.Add will be installed in turn. Durante el proceso, el instalador mantiene información de estado que indica qué objetos se han instalado, por lo que se puede hacer una copia de seguridad de cada uno de ellos a su vez si se produce un error de instalación.During the process, the installer maintains state information indicating which objects have been installed, so each can be backed out in turn, if an installation failure occurs.

Normalmente, no se crearía explícitamente una instancia de la clase de instalador del proyecto.Normally, you would not create an instance of your project installer class explicitly. Lo crearía y agregaría el RunInstallerAttribute atributo a la sintaxis, pero es la utilidad de instalación que, en realidad, llama a y, por tanto, crea una instancia de la clase.You would create it and add the RunInstallerAttribute attribute to the syntax, but it is the install utility that actually calls, and therefore instantiates, the class.

#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

El ServiceInstaller funciona de forma específica en el servicio al que está asociado.The ServiceInstaller does work specific to the service with which it is associated. 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.It is used by the installation utility to write registry values associated with the service to a subkey within the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services registry key. El servicio se identifica mediante su ServiceName dentro de esta subclave.The service is identified by its ServiceName within this subkey. La subclave también incluye el nombre del archivo ejecutable o. dll al que pertenece el servicio.The subkey also includes the name of the executable or .dll to which the service belongs.

Para instalar un servicio, cree una clase de instalador de proyecto que herede de Installer la clase y establezca el RunInstallerAttribute atributo de la clase en true.To install a service, create a project installer class that inherits from the Installer class, and set the RunInstallerAttribute attribute on the class to true. En el proyecto, cree una ServiceProcessInstaller instancia por cada aplicación de servicio y ServiceInstaller una instancia para cada servicio de la aplicación.Within your project, create one ServiceProcessInstaller instance per service application, and one ServiceInstaller instance for each service in the application. Dentro del constructor de clase del instalador del proyecto, establezca las propiedades de instalación para ServiceProcessInstaller el ServiceInstaller servicio mediante las instancias de y, y Installers Agregue las instancias a la colección.Within your project installer class constructor, set the installation properties for the service using the ServiceProcessInstaller and ServiceInstaller instances, and add the instances to the Installers collection.

Nota

Se recomienda utilizar el constructor para agregar instancias de 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.It is recommended that you use the constructor for adding installer instances; however, if you need to add to the Installers collection in the Install method, be sure to perform the same additions to the collection in the Uninstall method.

Para todas las clases que derivan Installer de la clase, el estado Installers de la colección debe ser el mismo Install en Uninstall los métodos y.For all classes deriving from the Installer class, the state of the Installers collection must be the same in the Install and Uninstall methods. Sin embargo, puede evitar el mantenimiento de la colección a través Install de Uninstall los métodos y si agrega instancias de instalador Installers a la colección en el constructor de clase del instalador personalizado. Cuando se llama a la utilidad de instalación, busca el RunInstallerAttribute atributo.However, you can avoid the maintenance of the collection across the Install and Uninstall methods if you add installer instances to the Installers collection in your custom installer class constructor.When the install utility is called, it looks for the RunInstallerAttribute attribute. 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.If the attribute is true, the utility installs all the services that were added to the Installers collection that were associated with your project installer. Si RunInstallerAttribute esfalse o no existe, la utilidad de instalación omite el instalador del proyecto.If RunInstallerAttribute is false or does not exist, the install utility ignores the project installer.

El ServiceProcessInstaller asociado a la clase de instalación de proyecto instala información común a ServiceInstaller todas las instancias del proyecto.The ServiceProcessInstaller associated with your project installation class installs information common to all ServiceInstaller instances in the project. Si este servicio tiene algo que lo separa de los demás servicios del proyecto de instalación, este método instala esa información específica del servicio.If this service has anything that separates it from the other services in the installation project, that service-specific information is installed by this method.

Nota

Es fundamental que ServiceName sea idéntico ServiceBase.ServiceName al de ServiceBasela clase de la que deriva.It is crucial that the ServiceName be identical to the ServiceBase.ServiceName of the class you derived from ServiceBase. Normalmente, el valor de la ServiceBase.ServiceName propiedad para el servicio se establece dentro de la función Main () del ejecutable de la aplicación de servicio.Normally, the value of the ServiceBase.ServiceName property for the service is set within the Main() function of the service application's executable. El administrador de control de servicios ServiceInstaller.ServiceName utiliza la propiedad para buscar el servicio en este archivo ejecutable.The Service Control Manager uses the ServiceInstaller.ServiceName property to locate the service within this executable.

Puede modificar otras propiedades de la ServiceInstaller , ya sea antes o después de agregarlas a la Installers colección del instalador del proyecto.You can modify other properties on the ServiceInstaller either before or after adding it to the Installers collection of your project installer. Por ejemplo, un servicio StartType puede estar configurado para iniciar el servicio automáticamente en el reinicio o requerir que un usuario inicie el servicio manualmente.For example, a service's StartType may be set to start the service automatically at reboot or require a user to start the service manually.

Normalmente, no llamará a los métodos en ServiceInstaller dentro del código; normalmente solo los llama la utilidad de instalación.Normally, you will not call the methods on ServiceInstaller within your code; they are generally called only by the install utility. La utilidad de instalación de llama ServiceProcessInstaller.Install automáticamente ServiceInstaller.Install a los métodos y durante el proceso de instalación.The install utility automatically calls the ServiceProcessInstaller.Install and ServiceInstaller.Install methods during the installation process. Hace una copia de seguridad de los errores, si es Rollback necesario, ServiceInstaller.Rollbackmediante una llamada a (o) en todos los componentes instalados anteriormente.It backs out failures, if necessary, by calling Rollback (or ServiceInstaller.Rollback) on all previously installed components.

La utilidad de instalación Uninstall llama a para quitar el objeto.The installation utility calls Uninstall to remove the object.

La rutina de instalación de una aplicación mantiene información automáticamente sobre los componentes ya instalados, mediante el uso Installer.Contextdel instalador del proyecto.An application's install routine maintains information automatically about the components already installed, using the project installer's Installer.Context. Esta información de estado se actualiza continuamente como ServiceProcessInstaller la instancia y la ServiceInstaller utilidad instala cada instancia.This state information is continuously updated as the ServiceProcessInstaller instance, and each ServiceInstaller instance is installed by the utility. Normalmente, el código no necesita modificar la información de estado de forma explícita.It is usually unnecessary for your code to modify state information explicitly.

Cuando se realiza la instalación, crea automáticamente un EventLogInstaller para instalar el origen de registro de eventos asociado a la ServiceBase clase derivada.When the installation is performed, it automatically creates an EventLogInstaller to install the event log source associated with the ServiceBase derived class. El Log ServiceInstaller constructor establece la propiedad para este origen en el registro de aplicaciones del equipo.The Log property for this source is set by the ServiceInstaller constructor to the computer's Application log. Cuando se establece el ServiceName ServiceInstaller de (que ServiceBase.ServiceName debe ser idéntico al del servicio), Source se establece automáticamente en el mismo valor.When you set the ServiceName of the ServiceInstaller (which should be identical to the ServiceBase.ServiceName of the service), the Source is automatically set to the same value. En un error de instalación, la instalación del origen se revierte junto con los servicios instalados anteriormente.In an installation failure, the source's installation is rolled-back along with previously installed services.

El Uninstall método intenta detener el servicio si se está ejecutando.The Uninstall method tries to stop the service if it is running. Si esto se realiza correctamente o no Uninstall , deshace los cambios realizados por Install.Whether this succeeds or not, Uninstall undoes the changes made by Install. Si se creó un nuevo origen para el registro de eventos, el origen se elimina.If a new source was created for event logging, the source is deleted.

Constructores

ServiceInstaller()

Inicializa una nueva instancia de la clase ServiceInstaller.Initializes a new instance of the ServiceInstaller class.

Propiedades

CanRaiseEvents

Obtiene un valor que indica si el componente puede generar un evento.Gets a value indicating whether the component can raise an event.

(Heredado de Component)
Container

Obtiene IContainer que contiene Component.Gets the IContainer that contains the Component.

(Heredado de Component)
Context

Obtiene o establece información sobre la instalación actual.Gets or sets information about the current installation.

(Heredado de Installer)
DelayedAutoStart

Obtiene o establece un valor que indica si el servicio debe retrasar su inicio hasta que otros servicios iniciados automáticamente se ejecuten.Gets or sets a value that indicates whether the service should be delayed from starting until other automatically started services are running.

Description

Obtiene o establece la descripción del servicio.Gets or sets the description for the service.

DesignMode

Obtiene un valor que indica si Component está actualmente en modo de diseño.Gets a value that indicates whether the Component is currently in design mode.

(Heredado de Component)
DisplayName

Indica el nombre descriptivo que identifica el servicio para el usuario.Indicates the friendly name that identifies the service to the user.

Events

Obtiene la lista de controladores de eventos asociados a Component.Gets the list of event handlers that are attached to this Component.

(Heredado de Component)
HelpText

Obtiene el texto de ayuda de todos los instaladores que se encuentran en la colección de instaladores.Gets the help text for all the installers in the installer collection.

(Heredado de Installer)
Installers

Obtiene la colección de instaladores que contiene este instalador.Gets the collection of installers that this installer contains.

(Heredado de Installer)
Parent

Obtiene o establece el instalador que contiene la colección a la que pertenece este instalador.Gets or sets the installer containing the collection that this installer belongs to.

(Heredado de Installer)
ServiceName

Indica el nombre que utiliza el sistema para identificar este servicio.Indicates the name used by the system to identify this service. Esta propiedad tiene que ser idéntica a la propiedad ServiceName del servicio que se desea instalar.This property must be identical to the ServiceName of the service you want to install.

ServicesDependedOn

Indica los servicios que deben estar en ejecución para que se ejecute este servicio.Indicates the services that must be running for this service to run.

Site

Obtiene o establece el ISite de Component.Gets or sets the ISite of the Component.

(Heredado de Component)
StartType

Indica cómo y cuando se inició este servicio.Indicates how and when this service is started.

Métodos

Commit(IDictionary)

Cuando se reemplaza en una clase derivada, finaliza la transacción de instalación.When overridden in a derived class, completes the install transaction.

(Heredado de Installer)
CopyFromComponent(IComponent)

Copia propiedades de una instancia de ServiceBase en este instalador.Copies properties from an instance of ServiceBase to this installer.

CreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Heredado de MarshalByRefObject)
Dispose()

Libera todos los recursos que ha usado el objeto Component.Releases all resources used by the Component.

(Heredado de Component)
Dispose(Boolean)

Libera los recursos no administrados que usa el objeto Component y, opcionalmente, libera los recursos administrados.Releases the unmanaged resources used by the Component and optionally releases the managed resources.

(Heredado de Component)
Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Heredado de Object)
GetHashCode()

Sirve como función hash predeterminada.Serves as the default hash function.

(Heredado de Object)
GetLifetimeService()

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Heredado de MarshalByRefObject)
GetService(Type)

Devuelve un objeto que representa el servicio suministrado por Component o por Container.Returns an object that represents a service provided by the Component or by its Container.

(Heredado de Component)
GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Heredado de Object)
InitializeLifetimeService()

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.Obtains a lifetime service object to control the lifetime policy for this instance.

(Heredado de MarshalByRefObject)
Install(IDictionary)

Instala el servicio escribiendo la información de la aplicación de servicio en el Registro.Installs the service by writing service application information to the registry. Este método está pensado para que lo utilicen las herramientas de instalación que procesan automáticamente los métodos apropiados.This method is meant to be used by installation tools, which process the appropriate methods automatically.

IsEquivalentInstaller(ComponentInstaller)

Indica si dos instaladores pueden instalar el mismo servicio.Indicates whether two installers would install the same service.

MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto MarshalByRefObject actual.Creates a shallow copy of the current MarshalByRefObject object.

(Heredado de MarshalByRefObject)
OnAfterInstall(IDictionary)

Genera el evento AfterInstall.Raises the AfterInstall event.

(Heredado de Installer)
OnAfterRollback(IDictionary)

Genera el evento AfterRollback.Raises the AfterRollback event.

(Heredado de Installer)
OnAfterUninstall(IDictionary)

Genera el evento AfterUninstall.Raises the AfterUninstall event.

(Heredado de Installer)
OnBeforeInstall(IDictionary)

Genera el evento BeforeInstall.Raises the BeforeInstall event.

(Heredado de Installer)
OnBeforeRollback(IDictionary)

Genera el evento BeforeRollback.Raises the BeforeRollback event.

(Heredado de Installer)
OnBeforeUninstall(IDictionary)

Genera el evento BeforeUninstall.Raises the BeforeUninstall event.

(Heredado de Installer)
OnCommitted(IDictionary)

Genera el evento Committed.Raises the Committed event.

(Heredado de Installer)
OnCommitting(IDictionary)

Genera el evento Committing.Raises the Committing event.

(Heredado de Installer)
Rollback(IDictionary)

Deshace la información de la aplicación de servicio que el procedimiento de instalación escribió en el Registro.Rolls back service application information written to the registry by the installation procedure. Este método está pensado para que lo utilicen las herramientas de instalación que procesan automáticamente los métodos apropiados.This method is meant to be used by installation tools, which process the appropriate methods automatically.

ToString()

Devuelve una String que contiene el nombre del Component, si existe.Returns a String containing the name of the Component, if any. Este método no se debe invalidar.This method should not be overridden.

(Heredado de Component)
Uninstall(IDictionary)

Desinstala el servicio eliminando del Registro la información acerca de él.Uninstalls the service by removing information about it from the registry.

Eventos

AfterInstall

Se produce después de ejecutarse los métodos Install(IDictionary) de todos los instaladores de la propiedad Installers.Occurs after the Install(IDictionary) methods of all the installers in the Installers property have run.

(Heredado de Installer)
AfterRollback

Se produce después de deshacerse la instalación de todos los instaladores de la propiedad Installers.Occurs after the installations of all the installers in the Installers property are rolled back.

(Heredado de Installer)
AfterUninstall

Se produce después de que todos los instaladores de la propiedad Installers realicen sus operaciones de desinstalación.Occurs after all the installers in the Installers property perform their uninstallation operations.

(Heredado de Installer)
BeforeInstall

Se produce antes de ejecutarse el método Install(IDictionary) de cada instalador en la colección de instaladores.Occurs before the Install(IDictionary) method of each installer in the installer collection has run.

(Heredado de Installer)
BeforeRollback

Se produce antes de deshacerse los instaladores de la propiedad Installers.Occurs before the installers in the Installers property are rolled back.

(Heredado de Installer)
BeforeUninstall

Se produce antes de que los instaladores de la propiedad Installers realicen sus operaciones de desinstalación.Occurs before the installers in the Installers property perform their uninstall operations.

(Heredado de Installer)
Committed

Se produce después de que todos los instaladores de la propiedad Installers confirmen sus instalaciones.Occurs after all the installers in the Installers property have committed their installations.

(Heredado de Installer)
Committing

Se produce antes de que los instaladores de la propiedad Installers confirmen sus instalaciones.Occurs before the installers in the Installers property commit their installations.

(Heredado de Installer)
Disposed

Se produce cuando el componente se elimina mediante una llamada al método Dispose().Occurs when the component is disposed by a call to the Dispose() method.

(Heredado de Component)

Se aplica a

Consulte también: