ServiceController Класс

Определение

Представляет службу Windows и позволяет подключаться к запущенной или остановленной службе, управлять работой службы и получать сведения о ней.

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
Наследование
ServiceController
Наследование
ServiceController
Атрибуты
Реализации

Примеры

В следующем примере показано использование ServiceController класса для управления примером SimpleService службы.

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

Комментарии

Класс можно использовать для ServiceController подключения к существующим службам и управления ими. При создании экземпляра ServiceController класса необходимо задать его свойства, чтобы он взаимодействовал с определенной службой Windows. Затем можно использовать класс для запуска, остановки и управления службой.

Скорее всего, компонент будет использоваться ServiceController в административной емкости. Например, можно создать Windows или веб-приложение, которое отправляет пользовательские команды в службу через ServiceController экземпляр. Это полезно, так как оснастка консоли управления (SCM) microsoft Management Manager не поддерживает пользовательские команды.

После создания экземпляра ServiceControllerнеобходимо задать для него два свойства, чтобы определить службу, с которой он взаимодействует: имя компьютера и имя службы, которую вы хотите контролировать.

Примечание

По умолчанию MachineName устанавливается локальный компьютер, поэтому его не нужно изменять, если только экземпляр не должен указывать на другой компьютер.

Как правило, автор службы пишет код, который настраивает действие, связанное с определенной командой. Например, служба может содержать код для ответа на ServiceBase.OnPause команду. В этом случае пользовательская обработка для Pause задачи выполняется до того, как система приостановит службу.

Набор команд, которые может обрабатывать служба, зависит от его свойств; Например, можно задать CanStop для свойства для службы falseзначение . Этот параметр отрисовывает команду недоступной Stop для данной службы. Она предотвращает остановку службы из SCM, отключив необходимую кнопку. При попытке остановить службу из кода система вызывает ошибку и отображает сообщение об ошибке "Не удалось остановить servicename".

Конструкторы

ServiceController()

Инициализирует новый экземпляр класса ServiceController, не связанный с конкретной службой.

ServiceController(String)

Инициализирует новый экземпляр класса ServiceController, связанный с существующей службой на локальном компьютере.

ServiceController(String, String)

Инициализирует новый экземпляр класса ServiceController, связанный с существующей службой на указанном компьютере.

Свойства

CanPauseAndContinue

Получает значение, показывающее, возможны ли приостановка и возобновление работы службы.

CanRaiseEvents

Возвращает значение, показывающее, может ли компонент вызывать событие.

(Унаследовано от Component)
CanShutdown

Получает значение, показывающее, необходимо ли уведомлять службу о завершении работы системы.

CanStop

Получает значение, определяющее, возможен ли останов службы после ее запуска.

Container

Возвращает объект IContainer, который содержит коллекцию Component.

(Унаследовано от Component)
DependentServices

Получает набор служб, который зависит от службы, связанной с данным экземпляром ServiceController.

DesignMode

Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время.

(Унаследовано от Component)
DisplayName

Получает или задает понятное имя службы.

Events

Возвращает список обработчиков событий, которые прикреплены к этому объекту Component.

(Унаследовано от Component)
MachineName

Получает или задает имя компьютера, на котором находится данная служба.

ServiceHandle

Получает дескриптор службы.

ServiceName

Получает или задает имя, определяющее службу, на которую ссылается данный экземпляр.

ServicesDependedOn

Набор служб, от которых зависит данная служба.

ServiceType

Получает тип службы, на которую ссылается данный объект.

Site

Получает или задает ISite объекта Component.

(Унаследовано от Component)
StartType

Возвращает значение, указывающее способ запуска службы, представленной объектом ServiceController.

Status

Получает состояние службы, на которую ссылается данный объект.

Методы

Close()

Отключает данный экземпляр ServiceController от службы и освобождает все выделенные ему ресурсы.

Continue()

Возобновляет работу службы после ее приостановки.

CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
Dispose()

Выполняет определяемые приложением задачи, связанные с удалением, высвобождением или сбросом неуправляемых ресурсов.

Dispose()

Освобождает все ресурсы, занятые модулем Component.

(Унаследовано от Component)
Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом ServiceController, а при необходимости освобождает также управляемые ресурсы.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
ExecuteCommand(Int32)

Выполняет пользовательскую команду для службы.

GetDevices()

Загружает службы драйверов устройств на локальном компьютере.

GetDevices(String)

Загружает службы драйверов устройств на указанном компьютере.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Является устаревшей.

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

(Унаследовано от MarshalByRefObject)
GetService(Type)

Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container.

(Унаследовано от Component)
GetServices()

Загружает все службы на локальном компьютере, за исключением служб драйверов устройств.

GetServices(String)

Загружает все службы на указанном компьютере, за исключением служб драйверов устройств.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
InitializeLifetimeService()
Является устаревшей.

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.

(Унаследовано от MarshalByRefObject)
Pause()

Приостанавливает работу службы.

Refresh()

Обновляет значения свойств текущими значениями.

Start()

Запускает службу без передачи аргументов.

Start(String[])

Запускает службу, передавая заданные аргументы.

Stop()

Останавливает данную службу и все зависящие от нее службы.

Stop(Boolean)

Останавливает службу и при необходимости любые службы, зависящие от этой службы.

ToString()

Возвращает объект String, содержащий имя Component, если оно есть. Этот метод не следует переопределять.

(Унаследовано от Component)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
WaitForStatus(ServiceControllerStatus)

Постоянно ожидает достижения службой указанного состояния.

WaitForStatus(ServiceControllerStatus, TimeSpan)

Ожидает достижения службой заданного состояния или истечения заданного тайм-аута.

События

Disposed

Возникает при удалении компонента путем вызова метода Dispose().

(Унаследовано от Component)

Применяется к

См. также раздел