ServiceController Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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
- 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) |