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 específico do Windows. 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 um aplicativo Windows ou 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 microsoft do SCM (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 o 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; 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

Nome Description
ServiceController()

Inicializa uma nova instância da classe que não está associada a ServiceController um serviço específico.

ServiceController(String, String)

Inicializa uma nova instância da classe associada a ServiceController um serviço existente no computador especificado.

ServiceController(String)

Inicializa uma nova instância da classe associada a ServiceController um serviço existente no computador local.

Propriedades

Nome Description
CanPauseAndContinue

Obtém um valor que indica se o serviço pode ser pausado e retomado.

CanRaiseEvents

Obtém um valor que indica se o componente pode gerar 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 que ele é 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 ServiceController instância.

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 anexados a isso Component.

(Herdado de Component)
MachineName

Obtém ou define o nome do computador no qual esse serviço reside.

ServiceHandle

Obtém o identificador do serviço.

ServiceName

Obtém ou define o nome que identifica o serviço que essa instância faz referência.

ServicesDependedOn

O conjunto de serviços dos quais esse serviço depende.

ServiceType

Obtém o tipo de serviço que esse objeto faz referência.

Site

Obtém ou define o ISiteComponent.

(Herdado de Component)
StartType

Obtém um valor que indica como o serviço representado pelo ServiceController objeto é iniciado.

Status

Obtém o status do serviço referenciado por essa instância.

Métodos

Nome Description
Close()

Desconecta essa ServiceController instância do serviço e libera todos os recursos alocados pela instância.

Continue()

Continua um serviço depois que ele foi pausado.

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

Executa tarefas definidas pelo aplicativo associadas à liberação, 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 tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
GetService(Type)

Retorna um objeto que representa um serviço fornecido pelo Component ou por sua 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 para 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 dessa instância.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
Pause()

Suspende a operação de um serviço.

Refresh()

Atualiza os valores de propriedade redefinindo as propriedades para seus valores atuais.

Start()

Inicia o serviço, não passando argumentos.

Start(String[])

Inicia um serviço, passando os argumentos especificados.

Stop()

Interrompe esse serviço e todos os serviços que dependem desse serviço.

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, TimeSpan)

Aguarda que o serviço atinja o status especificado ou que o tempo limite especificado expire.

WaitForStatus(ServiceControllerStatus)

Espera infinitamente que o serviço atinja o status especificado.

Eventos

Nome Description
Disposed

Ocorre quando o componente é descartado por uma chamada para o Dispose() método.

(Herdado de Component)

Aplica-se a

Confira também