ServiceInstaller Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.
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 los objetos se crean 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 true
en .
Las propiedades opcionales se establecen en el instalador del proceso y los instaladores de servicio antes de agregar los instaladores a la Installers colección. Cuando la utilidad de instalación accede a , los objetos agregados MyProjectInstaller
a 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 hacer una copia de seguridad 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 llama realmente y, por lo 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 funciona 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 true
en . 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 en 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 demás 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 para el 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 antes o después de agregarlo a la Installers colección del instalador del proyecto. Por ejemplo, es posible que un servicio StartType se establezca para iniciar el servicio automáticamente al reiniciarse 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 explícitamente la información de estado.
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 caso de 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
ServiceInstaller() |
Inicializa una nueva instancia de la clase ServiceInstaller. |
Propiedades
CanRaiseEvents |
Obtiene un valor que indica si el componente puede generar un evento. (Heredado de Component) |
Container |
Obtiene la interfaz IContainer que contiene la clase Component. (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 el servicio debe retrasar su inicio hasta que otros servicios iniciados automáticamente se ejecuten. |
Description |
Obtiene o establece la descripción del servicio. |
DesignMode |
Obtiene un valor que indica si Component está actualmente en modo de diseño. (Heredado de Component) |
DisplayName |
Indica el nombre descriptivo que identifica el servicio para el usuario. |
Events |
Obtiene la lista de controladores de eventos asociados a Component. (Heredado de Component) |
HelpText |
Obtiene el texto de ayuda de todos los instaladores que se encuentran en la colección de instaladores. (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 que utiliza el sistema para identificar este servicio. Esta propiedad tiene que ser idéntica a la propiedad ServiceName del servicio que se desea instalar. |
ServicesDependedOn |
Indica los servicios que deben estar en ejecución para que se ejecute este servicio. |
Site |
Obtiene o establece ISite de Component. (Heredado de Component) |
StartType |
Indica cómo y cuando se inició este servicio. |
Métodos
Commit(IDictionary) |
Cuando se reemplaza en una clase derivada, finaliza la transacción de instalación. (Heredado de Installer) |
CopyFromComponent(IComponent) |
Copia propiedades de una instancia de ServiceBase en este instalador. |
CreateObjRef(Type) |
Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto. (Heredado de MarshalByRefObject) |
Dispose() |
Libera todos los recursos que usa Component. (Heredado de Component) |
Dispose(Boolean) |
Libera los recursos no administrados que usa Component y, de forma opcional, libera los recursos administrados. (Heredado de Component) |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la 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 el servicio suministrado por Component o por 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 la información de la aplicación de servicio en el Registro. Este método está pensado para que lo utilicen las herramientas de instalación que procesan automáticamente los métodos apropiados. |
IsEquivalentInstaller(ComponentInstaller) |
Indica si dos instaladores pueden instalar el mismo servicio. |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
MemberwiseClone(Boolean) |
Crea una copia superficial del objeto MarshalByRefObject actual. (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) |
Deshace la información de la aplicación de servicio que el procedimiento de instalación escribió en el Registro. Este método está pensado para que lo utilicen las herramientas de instalación que procesan automáticamente los métodos apropiados. |
ToString() |
Devuelve una String que contiene el nombre del Component, si existe. Este método no se debe invalidar. (Heredado de Component) |
Uninstall(IDictionary) |
Desinstala el servicio eliminando del Registro la información acerca de él. |
Eventos
AfterInstall |
Se produce después de ejecutarse los métodos Install(IDictionary) de todos los instaladores de la propiedad Installers. (Heredado de Installer) |
AfterRollback |
Se produce después de deshacerse la instalación de todos los instaladores de la propiedad Installers. (Heredado de Installer) |
AfterUninstall |
Se produce después de que todos los instaladores de la propiedad Installers realicen sus operaciones de desinstalación. (Heredado de Installer) |
BeforeInstall |
Se produce antes de ejecutarse el método Install(IDictionary) de cada instalador en la colección de instaladores. (Heredado de Installer) |
BeforeRollback |
Se produce antes de deshacerse los instaladores de la propiedad Installers. (Heredado de Installer) |
BeforeUninstall |
Se produce antes de que los instaladores de la propiedad Installers realicen sus operaciones de desinstalación. (Heredado de Installer) |
Committed |
Se produce después de que todos los instaladores de la propiedad Installers confirmen sus instalaciones. (Heredado de Installer) |
Committing |
Se produce antes de que los instaladores de la propiedad Installers confirmen sus instalaciones. (Heredado de Installer) |
Disposed |
Tiene lugar cuando una llamada elimina el componente mediante una llamada al método Dispose(). (Heredado de Component) |