ServiceController Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa um serviço Windows e permite que você se conecte a um serviço em execução ou parado, manipule-o ou obtenha informações sobre ele.
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
- Herança
- Herança
-
ServiceController
- Atributos
- Implementações
Exemplos
O exemplo a seguir demonstra o uso da ServiceController classe para controlar o exemplo de SimpleService
serviço.
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
Comentários
Você pode usar a ServiceController classe para se conectar e controlar o comportamento dos serviços existentes. Ao criar uma instância da ServiceController classe, você define suas propriedades para que ela interaja com um serviço de Windows específico. Em seguida, você pode usar a classe para iniciar, parar e manipular o serviço.
Você provavelmente usará o ServiceController componente em uma capacidade administrativa. Por exemplo, você pode criar uma Windows ou aplicativo Web que envia comandos personalizados para um serviço por meio da ServiceController instância. Isso seria útil, pois o snap-in do Console de Gerenciamento da Microsoft (SCM) do Service Control Manager não dá suporte a comandos personalizados.
Depois de criar uma instância, ServiceControllervocê deve definir duas propriedades nela para identificar o serviço com o qual ele interage: o nome do computador e o nome do serviço que você deseja controlar.
Observação
Por padrão, MachineName é definido como o computador local, portanto, você não precisa alterá-lo, a menos que deseje definir a instância para apontar para outro computador.
Em geral, o autor do serviço grava código que personaliza a ação associada a um comando específico. Por exemplo, um serviço pode conter código para responder a um ServiceBase.OnPause comando. Nesse caso, o processamento personalizado para a Pause tarefa é executado antes que o sistema pause o serviço.
O conjunto de comandos que um serviço pode processar depende de suas propriedades; por exemplo, você pode definir a CanStop propriedade para um serviço como false
. Essa configuração renderiza o Stop
comando indisponível nesse serviço específico; ele impede que você interrompo o serviço do SCM desabilitando o botão necessário. Se você tentar interromper o serviço do código, o sistema gerará um erro e exibirá a mensagem de erro "Falha ao parar servicename
".
Construtores
ServiceController() |
Inicializa uma nova instância da classe ServiceController que não está associada a um serviço específico. |
ServiceController(String) |
Inicializa uma nova instância da classe ServiceController que está associada a um serviço existente no computador local. |
ServiceController(String, String) |
Inicializa uma nova instância da classe ServiceController que está associada a um serviço existente no computador especificado. |
Propriedades
CanPauseAndContinue |
Obtém um valor que indica se o serviço pode ser colocado em pausa e retomado. |
CanRaiseEvents |
Obtém um valor que indica se o componente pode acionar um evento. (Herdado de Component) |
CanShutdown |
Obtém um valor que indica se o serviço deve ser notificado quando o sistema está sendo desligado. |
CanStop |
Obtém um valor que indica se o serviço pode ser interrompido depois de ser iniciado. |
Container |
Obtém o IContainer que contém o Component. (Herdado de Component) |
DependentServices |
Obtém o conjunto de serviços que depende do serviço associado a essa instância de ServiceController. |
DesignMode |
Obtém um valor que indica se o Component está no modo de design no momento. (Herdado de Component) |
DisplayName |
Obtém ou define um nome amigável para o serviço. |
Events |
Obtém a lista de manipuladores de eventos que estão anexados a este Component. (Herdado de Component) |
MachineName |
Obtém ou define o nome do computador no qual este serviço reside. |
ServiceHandle |
Obtém o identificador do serviço. |
ServiceName |
Obtém ou define o nome que identifica o serviço ao qual essa instância faz referência. |
ServicesDependedOn |
O conjunto de serviços que esse serviço depende. |
ServiceType |
Obtém o tipo de serviço que faz referência a esse objeto. |
Site |
Obtém ou define o ISite do Component. (Herdado de Component) |
StartType |
Obtém um valor que indica como o serviço representado pelo objeto ServiceController é iniciado. |
Status |
Obtém o status do serviço que é referenciado por essa instância. |
Métodos
Close() |
Desconecta esta instância ServiceController do serviço e libera todos os recursos alocados pela instância. |
Continue() |
Retoma um serviço depois de ele ter sido colocado em pausa. |
CreateObjRef(Type) |
Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto. (Herdado de MarshalByRefObject) |
Dispose() |
Realiza tarefas definidas pelo aplicativo associadas à liberação ou à redefinição de recursos não gerenciados. |
Dispose() |
Libera todos os recursos usados pelo Component. (Herdado de Component) |
Dispose(Boolean) |
Libera os recursos não gerenciados usados pelo ServiceController e opcionalmente libera os recursos gerenciados. |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
ExecuteCommand(Int32) |
Executa um comando personalizado no serviço. |
GetDevices() |
Recupera os serviços de driver de dispositivo no computador local. |
GetDevices(String) |
Recupera os serviços de driver de dispositivo no computador especificado. |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetLifetimeService() |
Obsoleto.
Recupera o objeto de serviço de tempo de vida atual que controla a política de ciclo de vida para esta instância. (Herdado de MarshalByRefObject) |
GetService(Type) |
Retorna um objeto que representa um serviço fornecido pelo Component ou pelo seu Container. (Herdado de Component) |
GetServices() |
Recupera todos os serviços no computador local, exceto os serviços de driver de dispositivo. |
GetServices(String) |
Recupera todos os serviços no computador especificado, exceto os serviços de driver de dispositivo. |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
InitializeLifetimeService() |
Obsoleto.
Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida para essa instância. (Herdado de MarshalByRefObject) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
MemberwiseClone(Boolean) |
Cria uma cópia superficial do objeto MarshalByRefObject atual. (Herdado de MarshalByRefObject) |
Pause() |
Suspende uma operação do serviço. |
Refresh() |
Atualiza os valores de propriedade redefinindo as propriedades para seus valores atuais. |
Start() |
Inicia o serviço, não passando nenhum argumento. |
Start(String[]) |
Inicia um serviço, passando os argumentos especificados. |
Stop() |
Para este serviço e quaisquer serviços que dependam dele. |
Stop(Boolean) |
Interrompe o serviço e, opcionalmente, todos os serviços que dependem desse serviço. |
ToString() |
Retorna um String que contém o nome do Component, se houver. Esse método não deve ser substituído. (Herdado de Component) |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
WaitForStatus(ServiceControllerStatus) |
Aguarda infinitamente o serviço atingir o status especificado. |
WaitForStatus(ServiceControllerStatus, TimeSpan) |
Espera o serviço atingir o status especificado ou o tempo limite especificado expirar. |
Eventos
Disposed |
Ocorre quando o componente é disposto por uma chamada ao método Dispose(). (Herdado de Component) |