Compartir vía


ServiceController Clase

Definición

Representa un servicio de Windows y le permite conectarse a un servicio en ejecución o detenido, manipularlo o obtener información sobre él.

public ref class ServiceController : System::ComponentModel::Component
public ref class ServiceController : IDisposable
public class ServiceController : System.ComponentModel.Component
public class ServiceController : IDisposable
[System.ServiceProcess.ServiceProcessDescription("ServiceControllerDesc")]
public class ServiceController : System.ComponentModel.Component
type ServiceController = class
    inherit Component
type ServiceController = class
    interface IDisposable
[<System.ServiceProcess.ServiceProcessDescription("ServiceControllerDesc")>]
type ServiceController = class
    inherit Component
Public Class ServiceController
Inherits Component
Public Class ServiceController
Implements IDisposable
Herencia
ServiceController
Herencia
ServiceController
Atributos
Implementaciones

Ejemplos

En el ejemplo siguiente se muestra el uso de la clase ServiceController para controlar el ejemplo de servicio SimpleService.

using System;
using System.ServiceProcess;
using System.Diagnostics;
using System.Threading;

namespace ServiceControllerSample
{
    class Program
    {
        public enum SimpleServiceCustomCommands
        { StopWorker = 128, RestartWorker, CheckWorker };
        static void Main(string[] args)
        {
            ServiceController[] scServices;
            scServices = ServiceController.GetServices();

            foreach (ServiceController scTemp in scServices)
            {

                if (scTemp.ServiceName == "Simple Service")
                {
                    // Display properties for the Simple Service sample
                    // from the ServiceBase example.
                    ServiceController sc = new ServiceController("Simple Service");
                    Console.WriteLine("Status = " + sc.Status);
                    Console.WriteLine("Can Pause and Continue = " + sc.CanPauseAndContinue);
                    Console.WriteLine("Can ShutDown = " + sc.CanShutdown);
                    Console.WriteLine("Can Stop = " + sc.CanStop);
                    if (sc.Status == ServiceControllerStatus.Stopped)
                    {
                        sc.Start();
                        while (sc.Status == ServiceControllerStatus.Stopped)
                        {
                            Thread.Sleep(1000);
                            sc.Refresh();
                        }
                    }
                    // Issue custom commands to the service
                    // enum SimpleServiceCustomCommands
                    //    { StopWorker = 128, RestartWorker, CheckWorker };
                    sc.ExecuteCommand((int)SimpleServiceCustomCommands.StopWorker);
                    sc.ExecuteCommand((int)SimpleServiceCustomCommands.RestartWorker);
                    sc.Pause();
                    while (sc.Status != ServiceControllerStatus.Paused)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    sc.Continue();
                    while (sc.Status == ServiceControllerStatus.Paused)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    sc.Stop();
                    while (sc.Status != ServiceControllerStatus.Stopped)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    String[] argArray = new string[] { "ServiceController arg1", "ServiceController arg2" };
                    sc.Start(argArray);
                    while (sc.Status == ServiceControllerStatus.Stopped)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    // Display the event log entries for the custom commands
                    // and the start arguments.
                    EventLog el = new EventLog("Application");
                    EventLogEntryCollection elec = el.Entries;
                    foreach (EventLogEntry ele in elec)
                    {
                        if (ele.Source.IndexOf("SimpleService.OnCustomCommand") >= 0 |
                            ele.Source.IndexOf("SimpleService.Arguments") >= 0)
                            Console.WriteLine(ele.Message);
                    }
                }
            }
        }
    }
}
// This sample displays the following output if the Simple Service
// sample is running:
//Status = Running
//Can Pause and Continue = True
//Can ShutDown = True
//Can Stop = True
//Status = Paused
//Status = Running
//Status = Stopped
//Status = Running
//4:14:49 PM - Custom command received: 128
//4:14:49 PM - Custom command received: 129
//ServiceController arg1
//ServiceController arg2
Imports System.ServiceProcess
Imports System.Diagnostics
Imports System.Threading



Class Program

    Public Enum SimpleServiceCustomCommands
        StopWorker = 128
        RestartWorker
        CheckWorker
    End Enum 'SimpleServiceCustomCommands

    Shared Sub Main(ByVal args() As String)
        Dim scServices() As ServiceController
        scServices = ServiceController.GetServices()

        Dim scTemp As ServiceController
        For Each scTemp In scServices

            If scTemp.ServiceName = "Simple Service" Then
                ' Display properties for the Simple Service sample 
                ' from the ServiceBase example
                Dim sc As New ServiceController("Simple Service")
                Console.WriteLine("Status = " + sc.Status.ToString())
                Console.WriteLine("Can Pause and Continue = " + _
                    sc.CanPauseAndContinue.ToString())
                Console.WriteLine("Can ShutDown = " + sc.CanShutdown.ToString())
                Console.WriteLine("Can Stop = " + sc.CanStop.ToString())
                If sc.Status = ServiceControllerStatus.Stopped Then
                    sc.Start()
                    While sc.Status = ServiceControllerStatus.Stopped
                        Thread.Sleep(1000)
                        sc.Refresh()
                    End While
                End If
                ' Issue custom commands to the service
                ' enum SimpleServiceCustomCommands 
                '    { StopWorker = 128, RestartWorker, CheckWorker };
                sc.ExecuteCommand(Fix(SimpleServiceCustomCommands.StopWorker))
                sc.ExecuteCommand(Fix(SimpleServiceCustomCommands.RestartWorker))
                sc.Pause()
                While sc.Status <> ServiceControllerStatus.Paused
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                sc.Continue()
                While sc.Status = ServiceControllerStatus.Paused
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                sc.Stop()
                While sc.Status <> ServiceControllerStatus.Stopped
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                Dim argArray() As String = {"ServiceController arg1", "ServiceController arg2"}
                sc.Start(argArray)
                While sc.Status = ServiceControllerStatus.Stopped
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                ' Display the event log entries for the custom commands
                ' and the start arguments.
                Dim el As New EventLog("Application")
                Dim elec As EventLogEntryCollection = el.Entries
                Dim ele As EventLogEntry
                For Each ele In elec
                    If ele.Source.IndexOf("SimpleService.OnCustomCommand") >= 0 Or ele.Source.IndexOf("SimpleService.Arguments") >= 0 Then
                        Console.WriteLine(ele.Message)
                    End If
                Next ele
            End If
        Next scTemp

    End Sub
End Class
' This sample displays the following output if the Simple Service
' sample is running:
'Status = Running
'Can Pause and Continue = True
'Can ShutDown = True
'Can Stop = True
'Status = Paused
'Status = Running
'Status = Stopped
'Status = Running
'4:14:49 PM - Custom command received: 128
'4:14:49 PM - Custom command received: 129
'ServiceController arg1
'ServiceController arg2

Comentarios

Puede usar la clase ServiceController para conectarse y controlar el comportamiento de los servicios existentes. Al crear una instancia de la clase ServiceController, establece sus propiedades para que interactúe con un servicio de Windows específico. A continuación, puede usar la clase para iniciar, detener y manipular el servicio.

Lo más probable es que use el componente ServiceController en una capacidad administrativa. Por ejemplo, podría crear una aplicación web o Windows que envíe comandos personalizados a un servicio a través de la instancia de ServiceController. Esto sería útil, ya que el complemento Microsoft Management Console de Service Control Manager (SCM) no admite comandos personalizados.

Después de crear una instancia de ServiceController, debe establecer dos propiedades en él para identificar el servicio con el que interactúa: el nombre del equipo y el nombre del servicio que desea controlar.

Nota

De forma predeterminada, MachineName se establece en el equipo local, por lo que no es necesario cambiarlo a menos que desee establecer la instancia para que apunte a otro equipo.

Por lo general, el autor del servicio escribe código que personaliza la acción asociada a un comando específico. Por ejemplo, un servicio puede contener código para responder a un comando ServiceBase.OnPause. En ese caso, el procesamiento personalizado de la tarea Pause se ejecuta antes de que el sistema detenga el servicio.

El conjunto de comandos que un servicio puede procesar depende de sus propiedades; por ejemplo, puede establecer la propiedad CanStop para un servicio en false. Esta configuración representa el comando Stop no disponible en ese servicio en particular; evita que detenga el servicio desde el SCM deshabilitando el botón necesario. Si intenta detener el servicio desde el código, el sistema genera un error y muestra el mensaje de error "No se pudo detener servicename".

Constructores

ServiceController()

Inicializa una nueva instancia de la clase ServiceController que no está asociada a un servicio específico.

ServiceController(String, String)

Inicializa una nueva instancia de la clase ServiceController asociada a un servicio existente en el equipo especificado.

ServiceController(String)

Inicializa una nueva instancia de la clase ServiceController asociada a un servicio existente en el equipo local.

Propiedades

CanPauseAndContinue

Obtiene un valor que indica si el servicio se puede pausar y reanudar.

CanRaiseEvents

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

(Heredado de Component)
CanShutdown

Obtiene un valor que indica si se debe notificar al servicio cuando el sistema se apaga.

CanStop

Obtiene un valor que indica si el servicio se puede detener después de que se haya iniciado.

Container

Obtiene el IContainer que contiene el Component.

(Heredado de Component)
DependentServices

Obtiene el conjunto de servicios que depende del servicio asociado a esta instancia de ServiceController.

DesignMode

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

(Heredado de Component)
DisplayName

Obtiene o establece un nombre descriptivo para el servicio.

Events

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

(Heredado de Component)
MachineName

Obtiene o establece el nombre del equipo en el que reside este servicio.

ServiceHandle

Obtiene el identificador del servicio.

ServiceName

Obtiene o establece el nombre que identifica el servicio al que hace referencia esta instancia.

ServicesDependedOn

Conjunto de servicios de los que depende este servicio.

ServiceType

Obtiene el tipo de servicio al que hace referencia este objeto.

Site

Obtiene o establece el ISite del Component.

(Heredado de Component)
StartType

Obtiene un valor que indica cómo se inicia el servicio representado por el objeto ServiceController.

Status

Obtiene el estado del servicio al que hace referencia esta instancia.

Métodos

Close()

Desconecta esta instancia de ServiceController del servicio y libera todos los recursos asignados a la instancia.

Continue()

Continúa un servicio después de que se haya pausado.

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()

Realiza tareas definidas por la aplicación asociadas a la liberación, liberación o restablecimiento de recursos no administrados.

Dispose()

Libera todos los recursos usados por el Component.

(Heredado de Component)
Dispose(Boolean)

Libera los recursos no administrados usados por el ServiceController y, opcionalmente, libera los recursos administrados.

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
ExecuteCommand(Int32)

Ejecuta un comando personalizado en el servicio.

GetDevices()

Recupera los servicios del controlador de dispositivo en el equipo local.

GetDevices(String)

Recupera los servicios del controlador de dispositivo en el equipo especificado.

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 el Component o por su Container.

(Heredado de Component)
GetServices()

Recupera todos los servicios del equipo local, excepto los servicios del controlador de dispositivo.

GetServices(String)

Recupera todos los servicios del equipo especificado, excepto los servicios del controlador de dispositivo.

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)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto MarshalByRefObject actual.

(Heredado de MarshalByRefObject)
Pause()

Suspende la operación de un servicio.

Refresh()

Actualiza los valores de propiedad restableciendo las propiedades a sus valores actuales.

Start()

Inicia el servicio y no pasa ningún argumento.

Start(String[])

Inicia un servicio y pasa los argumentos especificados.

Stop()

Detiene este servicio y los servicios que dependen de este servicio.

Stop(Boolean)

Detiene el servicio y, opcionalmente, los servicios que dependen de este servicio.

ToString()

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

(Heredado de Component)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
WaitForStatus(ServiceControllerStatus, TimeSpan)

Espera a que el servicio llegue al estado especificado o para que expire el tiempo de espera especificado.

WaitForStatus(ServiceControllerStatus)

Espera infinitamente que el servicio alcance el estado especificado.

Eventos

Disposed

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

(Heredado de Component)

Se aplica a

Consulte también