ServiceController ServiceController ServiceController ServiceController Class

정의

Windows 서비스를 나타내며 이 클래스를 사용하면 실행 중이거나 중지된 서비스에 연결하거나 서비스를 조작하거나 서비스 관련 정보를 가져올 수 있습니다.Represents a Windows service and allows you to connect to a running or stopped service, manipulate it, or get information about it.

public ref class ServiceController : System::ComponentModel::Component
[System.ServiceProcess.ServiceProcessDescription("ServiceControllerDesc")]
public class ServiceController : System.ComponentModel.Component
type ServiceController = class
    inherit Component
Public Class ServiceController
Inherits Component
상속
특성

예제

다음 예제에서는 사용 합니다 ServiceController 컨트롤 클래스는 SimpleService 서비스 예제입니다.The following example demonstrates the use of the ServiceController class to control the SimpleService service example.

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
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 'Main 
End Class 'Program
' 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 연결 하 여 기존 서비스의 동작을 제어 하는 클래스입니다.You can use the ServiceController class to connect to and control the behavior of existing services. 인스턴스를 만들 때의 ServiceController 클래스, 해당 속성을 설정한 특정 Windows 서비스와 상호 작용 하도록 합니다.When you create an instance of the ServiceController class, you set its properties so it interacts with a specific Windows service. 그런 다음 시작, 중지 및 그렇지 않은 경우 서비스를 조작 하는 클래스를 사용할 수 있습니다.You can then use the class to start, stop, and otherwise manipulate the service.

가장 많이 사용 하는 ServiceController 구성 요소를 용량을 관리 합니다.You will most likely use the ServiceController component in an administrative capacity. 예를 들어, Windows를 만들 수 있습니다 또는 사용자 지정 전송 하는 웹 애플리케이션 명령을 통해 해당 서비스에는 ServiceController 인스턴스.For example, you could create a Windows or Web application that sends custom commands to a service through the ServiceController instance. 서비스 제어 관리자 (SCM) Microsoft Management Console 스냅인을 사용 하 여 사용자 지정 명령의 지원 하지 않기 때문에 유용할 수 됩니다.This would be useful, because the Service Control Manager (SCM) Microsoft Management Console snap-in does not support custom commands.

인스턴스를 만든 후 ServiceController, 작용할 서비스를 식별 하는 데 두 가지 속성을 설정 해야 합니다: 컴퓨터 이름과 제어 하려는 서비스의 이름입니다.After you create an instance of ServiceController, you must set two properties on it to identify the service with which it interacts: the computer name and the name of the service you want to control.

참고

기본적으로 MachineName 로컬 컴퓨터로 설정 되어 있으므로 다른 컴퓨터를 가리키도록 인스턴스를 설정 하려는 경우가 아니면 변경할 필요가 없습니다.By default, MachineName is set to the local computer, so you do not need to change it unless you want to set the instance to point to another computer.

일반적으로 서비스 작성자는 특정 명령과 사용 하 여 연결 된 동작을 사용자 지정 하는 코드를 작성 합니다.Generally, the service author writes code that customizes the action associated with a specific command. 예를 들어, 서비스에 응답 하는 코드를 포함할 수 있습니다는 ServiceBase.OnPause 명령입니다.For example, a service can contain code to respond to an ServiceBase.OnPause command. 이런 경우, 사용자 지정 처리는 Pause 시스템 서비스가 일시 중지 하기 전에 작업을 실행 합니다.In that case, the custom processing for the Pause task runs before the system pauses the service.

명령 처리할 수 집합은; 속성에 따라 다릅니다. 예를 들어, 설정할 수 있습니다 합니다 CanStop 서비스에 대 한 속성 false합니다.The set of commands a service can process depends on its properties; for example, you can set the CanStop property for a service to false. 이 설정은 렌더링 된 Stop 해당 서비스에서 사용할 수 없는 명령; 필요한 단추를 사용 하지 않도록 설정 하 여 SCM에서 서비스를 사용할 수 없습니다.This setting renders the Stop command unavailable on that particular service; it prevents you from stopping the service from the SCM by disabling the necessary button. 코드에서 서비스를 중지 하려고 하면 시스템 오류가 발생 하 고 오류 메시지를 표시 "를 중지 하지 못했습니다 servicename."If you try to stop the service from your code, the system raises an error and displays the error message "Failed to stop servicename."

생성자

ServiceController() ServiceController() ServiceController() ServiceController()

특정 서비스와 관련되지 않은 ServiceController 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ServiceController class that is not associated with a specific service.

ServiceController(String) ServiceController(String) ServiceController(String) ServiceController(String)

로컬 컴퓨터의 기존 서비스와 관련된 ServiceController 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ServiceController class that is associated with an existing service on the local computer.

ServiceController(String, String) ServiceController(String, String) ServiceController(String, String) ServiceController(String, String)

지정된 컴퓨터의 기존 서비스와 관련된 ServiceController 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ServiceController class that is associated with an existing service on the specified computer.

속성

CanPauseAndContinue CanPauseAndContinue CanPauseAndContinue CanPauseAndContinue

서비스를 일시 중지했다가 다시 시작할 수 있는지를 나타내는 값을 가져옵니다.Gets a value indicating whether the service can be paused and resumed.

CanRaiseEvents CanRaiseEvents CanRaiseEvents CanRaiseEvents

구성 요소가 이벤트를 발생시킬 수 있는지 여부를 나타내는 값을 가져옵니다.Gets a value indicating whether the component can raise an event.

(Inherited from Component)
CanShutdown CanShutdown CanShutdown CanShutdown

시스템을 종료할 때 서비스에 알릴지를 나타내는 값을 가져옵니다.Gets a value indicating whether the service should be notified when the system is shutting down.

CanStop CanStop CanStop CanStop

시작한 서비스를 중지할 수 있는지의 여부를 나타내는 값을 가져옵니다.Gets a value indicating whether the service can be stopped after it has started.

Container Container Container Container

IContainer가 포함된 Component를 가져옵니다.Gets the IContainer that contains the Component.

(Inherited from Component)
DependentServices DependentServices DependentServices DependentServices

ServiceController 인스턴스와 관련된 서비스에 종속되는 서비스 집합을 가져옵니다.Gets the set of services that depends on the service associated with this ServiceController instance.

DesignMode DesignMode DesignMode DesignMode

Component가 현재 디자인 모드인지 여부를 나타내는 값을 가져옵니다.Gets a value that indicates whether the Component is currently in design mode.

(Inherited from Component)
DisplayName DisplayName DisplayName DisplayName

서비스의 이름을 가져오거나 설정합니다.Gets or sets a friendly name for the service.

Events Events Events Events

Component에 연결된 이벤트 처리기의 목록을 가져옵니다.Gets the list of event handlers that are attached to this Component.

(Inherited from Component)
MachineName MachineName MachineName MachineName

이 서비스가 상주하는 컴퓨터의 이름을 가져오거나 설정합니다.Gets or sets the name of the computer on which this service resides.

ServiceHandle ServiceHandle ServiceHandle ServiceHandle

서비스에 대한 핸들을 가져옵니다.Gets the handle for the service.

ServiceName ServiceName ServiceName ServiceName

이 인스턴스가 참조하는 서비스를 식별하는 이름을 가져오거나 설정합니다.Gets or sets the name that identifies the service that this instance references.

ServicesDependedOn ServicesDependedOn ServicesDependedOn ServicesDependedOn

이 서비스가 결정되는 서비스 집합입니다.The set of services that this service depends on.

ServiceType ServiceType ServiceType ServiceType

이 개체가 참조하는 서비스 종류를 가져옵니다.Gets the type of service that this object references.

Site Site Site Site

ComponentISite를 가져오거나 설정합니다.Gets or sets the ISite of the Component.

(Inherited from Component)
StartType StartType StartType StartType

ServiceController 개체로 표현된 서비스가 시작하는 방법을 나타내는 값을 가져옵니다.Gets a value that indicates how the service represented by the ServiceController object starts.

Status Status Status Status

이 인스턴스에서 참조하는 서비스 상태를 가져옵니다.Gets the status of the service that is referenced by this instance.

메서드

Close() Close() Close() Close()

서비스에서 ServiceController 인스턴스의 연결을 끊고 해당 인스턴스가 할당한 리소스를 모두 해제합니다.Disconnects this ServiceController instance from the service and frees all the resources that the instance allocated.

Continue() Continue() Continue() Continue()

일시 중지한 서비스를 계속합니다.Continues a service after it has been paused.

CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

원격 개체와 통신하는 데 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
Dispose() Dispose() Dispose() Dispose()
Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

ServiceController에서 사용하는 관리되지 않는 리소스를 해제하고, 관리되는 리소스를 선택적으로 해제할 수 있습니다.Releases the unmanaged resources used by the ServiceController and optionally releases the managed resources.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(Inherited from Object)
ExecuteCommand(Int32) ExecuteCommand(Int32) ExecuteCommand(Int32) ExecuteCommand(Int32)

서비스에서 사용자 지정 명령을 실행합니다.Executes a custom command on the service.

GetDevices() GetDevices() GetDevices() GetDevices()

로컬 컴퓨터에서 장치 드라이버 서비스를 검색합니다.Retrieves the device driver services on the local computer.

GetDevices(String) GetDevices(String) GetDevices(String) GetDevices(String)

지정된 컴퓨터에서 장치 드라이버 서비스를 검색합니다.Retrieves the device driver services on the specified computer.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

이 인스턴스의 수명 정책을 제어하는 현재의 수명 서비스 개체를 검색합니다.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetService(Type) GetService(Type) GetService(Type) GetService(Type)

Component 또는 해당 Container에서 제공하는 서비스를 나타내는 개체를 반환합니다.Returns an object that represents a service provided by the Component or by its Container.

(Inherited from Component)
GetServices() GetServices() GetServices() GetServices()

로컬 컴퓨터에서 장치 드라이버 서비스를 제외한 모든 서비스를 검색합니다.Retrieves all the services on the local computer, except for the device driver services.

GetServices(String) GetServices(String) GetServices(String) GetServices(String)

지정된 컴퓨터에서 장치 드라이버 서비스를 제외한 모든 서비스를 검색합니다.Retrieves all the services on the specified computer, except for the device driver services.

GetType() GetType() GetType() GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(Inherited from Object)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

이 인스턴스의 수명 정책을 제어하는 수명 서비스 개체를 가져옵니다.Obtains a lifetime service object to control the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
Pause() Pause() Pause() Pause()

서비스 작업을 일시 중단합니다.Suspends a service's operation.

Refresh() Refresh() Refresh() Refresh()

현재 값으로 속성을 다시 설정하여 속성 값을 새로 고칩니다.Refreshes property values by resetting the properties to their current values.

Start() Start() Start() Start()

인수를 전달하지 않고 서비스를 시작합니다.Starts the service, passing no arguments.

Start(String[]) Start(String[]) Start(String[]) Start(String[])

지정된 인수를 전달하면서 서비스를 시작합니다.Starts a service, passing the specified arguments.

Stop() Stop() Stop() Stop()

이 서비스와 이 서비스에 종속되는 서비스를 중지합니다.Stops this service and any services that are dependent on this service.

ToString() ToString() ToString() ToString()

Component의 이름이 포함된 String을 반환합니다(있는 경우).Returns a String containing the name of the Component, if any. 이 메서드는 재정의할 수 없습니다.This method should not be overridden.

(Inherited from Component)
WaitForStatus(ServiceControllerStatus) WaitForStatus(ServiceControllerStatus) WaitForStatus(ServiceControllerStatus) WaitForStatus(ServiceControllerStatus)

서비스가 지정된 상태에 도달할 때까지 무제한 대기합니다.Infinitely waits for the service to reach the specified status.

WaitForStatus(ServiceControllerStatus, TimeSpan) WaitForStatus(ServiceControllerStatus, TimeSpan) WaitForStatus(ServiceControllerStatus, TimeSpan) WaitForStatus(ServiceControllerStatus, TimeSpan)

서비스가 지정된 상태에 도달하거나 지정된 제한 시간이 만료될 때까지 대기합니다.Waits for the service to reach the specified status or for the specified time-out to expire.

이벤트

Disposed Disposed Disposed Disposed

Dispose() 메서드를 호출하여 구성 요소가 삭제되는 경우 발생합니다.Occurs when the component is disposed by a call to the Dispose() method.

(Inherited from Component)

적용 대상

추가 정보