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 класса для управления примером 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) |