Compartilhar via


ServiceController Classe

Definição

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

Aplica-se a

Confira também