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 экземпляр. Это полезно, так как оснастка консоли управления 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) |