ServiceController 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í.
Representa un servicio de Windows y permite conectarse a un servicio en ejecución o detenido, manipularlo u 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
- Herencia
-
ServiceController
- Atributos
- Implementaciones
Ejemplos
En el ejemplo siguiente se muestra el uso de la ServiceController clase para controlar el ejemplo de SimpleService
servicio.
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 ServiceController clase para conectarse y controlar el comportamiento de los servicios existentes. Al crear una instancia de la ServiceController clase , 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 ServiceController componente en una capacidad administrativa. Por ejemplo, puede crear una aplicación web o windows que envíe comandos personalizados a un servicio a través de la ServiceController instancia de . Esto sería útil, ya que el complemento Service Control Manager (SCM) Microsoft Management Console 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 ServiceBase.OnPause comando. En ese caso, el procesamiento personalizado de la Pause tarea 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 CanStop propiedad de un servicio en false
. Esta configuración representa el Stop
comando 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 del 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 determinado. |
ServiceController(String) |
Inicializa una nueva instancia de la clase ServiceController que está asociada a un servicio existente en el equipo local. |
ServiceController(String, String) |
Inicializa una nueva instancia de la clase ServiceController que está asociada a un servicio existente en el equipo especificado. |
Propiedades
CanPauseAndContinue |
Obtiene un valor que indica si se puede pausar y reanudar el servicio. |
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 se está cerrando el sistema. |
CanStop |
Obtiene un valor que indica si el servicio puede detenerse después de haberse iniciado. |
Container |
Obtiene la interfaz IContainer que contiene la clase Component. (Heredado de Component) |
DependentServices |
Obtiene el conjunto de servicios que depende del servicio asociado a esta instancia ServiceController. |
DesignMode |
Obtiene un valor que indica si 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 asociados a Component. (Heredado de Component) |
MachineName |
Obtiene o establece el nombre del equipo en el que reside el 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 ISite de 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 desde el servicio y libera todos los recursos que asignó la instancia. |
Continue() |
Reanuda un servicio después de que se haya dejado en pausa. |
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() |
Realiza tareas definidas por la aplicación asociadas a la liberación o al restablecimiento de recursos no administrados. |
Dispose() |
Libera todos los recursos que usa Component. (Heredado de Component) |
Dispose(Boolean) |
Libera los recursos no administrados que usa ServiceController y, de forma opcional, libera los recursos administrados. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
ExecuteCommand(Int32) |
Ejecuta un comando personalizado en el servicio. |
GetDevices() |
Recupera los servicios del controlador de dispositivos en el equipo local. |
GetDevices(String) |
Recupera los servicios del controlador de dispositivos en el equipo especificado. |
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) |
GetServices() |
Recupera todos los servicios del equipo local, excepto los servicios de controlador de dispositivos. |
GetServices(String) |
Recupera todos los servicios del equipo especificado, excepto los servicios de controlador de dispositivos. |
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 Object actual. (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 propiedades y las restablece en sus valores actuales. |
Start() |
Inicia el servicio sin pasar argumentos. |
Start(String[]) |
Inicia un servicio y pasa los argumentos especificados. |
Stop() |
Detiene este servicio y todos los servicios que dependan de él. |
Stop(Boolean) |
Detiene el servicio y, opcionalmente, cualquier servicio que dependa de este servicio. |
ToString() |
Devuelve una 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) |
No actúa hasta que el servicio alcanza el estado especificado. |
WaitForStatus(ServiceControllerStatus, TimeSpan) |
Espera a que el servicio alcance el estado especificado o a que expire el tiempo de espera especificado. |
Eventos
Disposed |
Tiene lugar cuando una llamada elimina el componente mediante una llamada al método Dispose(). (Heredado de Component) |