Evaluar y enviar comentarios

  Encender vista de ancho de banda bajo
Esta página es específica de
Microsoft Visual Studio 2005/.NET Framework 2.0

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
ServiceProcessInstaller (Clase)

Instala un ejecutable que contiene clases que extienden ServiceBase. Las utilidades de instalación, como InstallUtil.exe, llaman a esta clase al instalar una aplicación de servicio.

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

Visual Basic (Declaración)
Public Class ServiceProcessInstaller
    Inherits ComponentInstaller
Visual Basic (Uso)
Dim instance As ServiceProcessInstaller
C#
public class ServiceProcessInstaller : ComponentInstaller
C++
public ref class ServiceProcessInstaller : public ComponentInstaller
J#
public class ServiceProcessInstaller extends ComponentInstaller
JScript
public class ServiceProcessInstaller extends ComponentInstaller

ServiceProcessInstaller realiza trabajo común a todos los servicios de un ejecutable. La utilidad de instalación lo utiliza para escribir valores del Registro asociados a los servicios que desea instalar.

Para instalar un servicio, cree una clase de instalador del proyecto que herede de la clase Installer y establezca RunInstallerAttribute en la clase en true. En el proyecto, cree una instancia de ServiceProcessInstaller por cada aplicación de servicio y una instancia de ServiceInstaller para cada servicio de la aplicación. Finalmente, agregue la instancia de ServiceProcessInstaller y las instancias de ServiceInstaller a la clase de instalador del proyecto.

Cuando se ejecuta InstallUtil.exe, la utilidad busca clases en el ensamblado del servicio con RunInstallerAttribute establecido en true. Agregue clases al ensamblado de servicio agregándolas a la colección Installers asociada al instalador del proyecto. Si RunInstallerAttribute es false, la utilidad de instalación omite el instalador del proyecto.

Para una instancia de ServiceProcessInstaller, entre las propiedades que puede modificar se incluye la especificación de que una aplicación de servicio se ejecute en una cuenta que no sea la del usuario que inició la sesión. Es posible especificar un par Username y Password determinado en el cual debe ejecutarse el servicio o se puede utilizar Account para especificar que el servicio se ejecute en la cuenta de sistema del equipo correspondiente, una cuenta de servicio local o de red o una cuenta de usuario.

NotaNota

La cuenta de sistema del equipo no es igual que la cuenta de administrador.

Normalmente, no habrá que llamar a los métodos en ServiceInstaller dentro del código; generalmente será la la utilidad de instalación sólo la que los llame. La utilidad de instalación llama de forma automática a los métodos ServiceProcessInstaller.Install y ServiceInstaller.Install 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 rutina de instalación de una aplicación mantiene de forma automática la información acerca de los componentes que ya se han instalado mediante la propiedad Installer.Context del instalador del proyecto. Esta información de estado se actualiza continuamente a medida que la utilidad instala la instancia de ServiceProcessInstaller y cada una de las instancias de ServiceInstaller. No suele ser necesario que el código modifique esta información de estado de forma explícita.

Al crear una instancia de ServiceProcessInstaller, se llama al constructor ComponentInstaller de la clase base.

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, al que llamaría la unidad de instalación, se crean los objetos ServiceInstaller para cada uno de estos servicios y ServiceProcessInstaller para el ejecutable. Para que la utilidad de instalación reconozca MyProjectInstaller como un instalador válido, el atributo RunInstallerAttribute se establece en true.

Las propiedades opcionales se establecen en el instalador del proceso y los instaladores del servicio antes de que los instaladores se agreguen a la colección Installers. Cuando la utilidad de instalación obtiene acceso a MyProjectInstaller, los objetos agregados a la colección Installers se instalan uno a uno mediante una llamada a InstallerCollection.Add. Durante el proceso, el instalador mantiene información de estado que indica qué objetos se instalaron, para que puedan deshacerse todos uno a uno en el caso de que se produzca un error en la instalación.

Normalmente, no se crea una instancia de la clase de instalador del proyecto de forma explícita. Habría que crearla y agregarla a RunInstallerAttribute, pero la utilidad de instalación realmente llama a la clase y, por lo tanto, crea instancias de la clase.

Visual Basic
Imports System
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
End Class

C#
using System;
using System.Collections;
using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;

[RunInstallerAttribute(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);
   }
}

C++
#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;

[RunInstallerAttribute(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 );
   }

};

J#
import System.*;
import System.Collections.*;
import System.Configuration.Install.*;
import System.ServiceProcess.*;
import System.ComponentModel.*;

/** @attribute RunInstallerAttribute(true)
 */
public class MyProjectInstaller extends 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.set_Account(ServiceAccount.LocalSystem);

        // The services are started manually.
        serviceInstaller1.set_StartType(ServiceStartMode.Manual);
        serviceInstaller2.set_StartType(ServiceStartMode.Manual);

        // ServiceName must equal those on ServiceBase derived classes.            
        serviceInstaller1.set_ServiceName("Hello-World Service 1");
        serviceInstaller2.set_ServiceName("Hello-World Service 2");

        // Add installers to collection. Order is not important.
        get_Installers().Add(serviceInstaller1);
        get_Installers().Add(serviceInstaller2);
        get_Installers().Add(processInstaller);
    } //MyProjectInstaller
} //MyProjectInstaller
System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.Configuration.Install.Installer
         System.Configuration.Install.ComponentInstaller
          System.ServiceProcess.ServiceProcessInstaller
Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0, 1.1, 1.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2009 Microsoft Corporation. Reservados todos los derechos. Términos de uso  |  Marcas Registradas  |  Privacidad
Page view tracker