Поделиться через


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 экземпляр. Это полезно, так как оснастка консоли управления Microsoft Control Manager (SCM) не поддерживает пользовательские команды.

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

Замечание

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

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

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

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

Имя Описание
ServiceController()

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

ServiceController(String, String)

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

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

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

WaitForStatus(ServiceControllerStatus)

Бесконечно ожидает, пока служба достигнет указанного состояния.

События

Имя Описание
Disposed

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

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

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

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