ServiceController Classe

Definição

Representa um serviço Windows e permite-te ligar-te a um serviço em execução ou parado, manipulá-lo ou obter informações sobre ele.

public ref class ServiceController : System::ComponentModel::Component
public class ServiceController : System.ComponentModel.Component
[System.ServiceProcess.ServiceProcessDescription("ServiceControllerDesc")]
public class ServiceController : System.ComponentModel.Component
type ServiceController = class
    inherit Component
[<System.ServiceProcess.ServiceProcessDescription("ServiceControllerDesc")>]
type ServiceController = class
    inherit Component
Public Class ServiceController
Inherits Component
Herança
ServiceController
Atributos

Exemplos

O exemplo seguinte demonstra o uso da ServiceController classe para controlar o SimpleService exemplo do 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

Observações

Pode usar a ServiceController classe para se ligar e controlar o comportamento dos serviços existentes. Quando crias uma instância da classe ServiceController, defines as suas propriedades para que interaja com um serviço Windows específico. Depois podes usar a classe para iniciar, parar e manipular o serviço.

Muito provavelmente vais usar o ServiceController componente numa função administrativa. Por exemplo, pode criar uma Windows ou uma aplicação Web que envie comandos personalizados para um serviço através da instância ServiceController. Isto seria útil, porque o snap-in da Consola de Gestão da Microsoft do Service Control Manager (SCM) não suporta comandos personalizados.

Depois de criar uma instância de ServiceController, deve definir duas propriedades para identificar o serviço com o qual interage: o nome do computador e o nome do serviço que pretende controlar.

Note

Por defeito, MachineName está definido para o computador local, por isso não precisas de o alterar a menos que queiras definir a instância para apontar para outro computador.

Geralmente, o autor do serviço escreve 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 da Pause tarefa é executado antes do sistema pausar o serviço.

O conjunto de comandos que um serviço pode processar depende das suas propriedades; Por exemplo, pode definir a CanStop propriedade de um serviço para false. Esta configuração torna o Stop comando indisponível nesse serviço em particular; impede-o de parar o serviço do SCM ao desativar o botão necessário. Se tentar parar o serviço no seu código, o sistema gera um erro e mostra a mensagem de erro "Falhou em parar servicename."

Construtores

Name Description
ServiceController()

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

ServiceController(String, String)

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

ServiceController(String)

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

Propriedades

Name Description
CanPauseAndContinue

Recebe 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

Recebe um valor que indica se o serviço deve ser notificado quando o sistema está a desligar-se.

CanStop

Recebe um valor que indica se o serviço pode ser interrompido depois de ter começado.

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 esta ServiceController instância.

DesignMode

Obtém um valor que indica se o Component está atualmente em modo de design.

(Herdado de Component)
DisplayName

Recebe ou define um nome amigável para o serviço.

Events

Obtém a lista de gestores de eventos que estão ligados a isto Component.

(Herdado de Component)
MachineName

Obtém ou define o nome do computador onde este serviço se encontra.

ServiceHandle

Fica com a alavanca do serviço.

ServiceName

Recebe ou define o nome que identifica o serviço que esta instância referencia.

ServicesDependedOn

O conjunto de serviços de que este serviço depende.

ServiceType

Obtém o tipo de serviço que este objeto referencia.

Site

Obtém ou define o ISite do Component.

(Herdado de Component)
StartType

Recebe um valor que indica como o serviço representado pelo ServiceController objeto começa.

Status

Obtém o estado do serviço referenciado por esta instância.

Métodos

Name Description
Close()

Desconecta esta ServiceController instância do serviço e liberta todos os recursos que a instância alocou.

Continue()

Continua o serviço depois de ter sido pausado.

CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Dispose()

Liberta todos os recursos utilizados pelo Component.

(Herdado de Component)
Dispose(Boolean)

Liberta os recursos não geridos usados pelo ServiceController e opcionalmente liberta os recursos geridos.

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 função de hash predefinida.

(Herdado de Object)
GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetService(Type)

Devolve 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 do controlador de dispositivos.

GetServices(String)

Recupera todos os serviços no computador especificado, exceto os serviços do controlador de dispositivos.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(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 das propriedades ao redefinir as propriedades para os valores atuais.

Start()

Começa a cerimónia, sem apresentar argumentos.

Start(String[])

Inicia um serviço, passando os argumentos especificados.

Stop()

Interrompe este serviço e quaisquer serviços que dependam deste serviço.

ToString()

Devolve a String contendo o nome do Component, se existir. Este método não deve ser ultrapassado.

(Herdado de Component)
WaitForStatus(ServiceControllerStatus, TimeSpan)

Espera que o serviço atinja o estado especificado ou que o tempo de espera expire.

WaitForStatus(ServiceControllerStatus)

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

evento

Name Description
Disposed

Ocorre quando o componente é eliminado por uma chamada ao Dispose() método.

(Herdado de Component)

Aplica-se a

Ver também