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.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クラスを使用して、既存のサービスに接続し、その動作を制御することができます。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. たとえば、 ServiceControllerインスタンスを介してサービスにカスタムコマンドを送信する Windows アプリケーションや Web アプリケーションを作成できます。For example, you could create a Windows or Web application that sends custom commands to a service through the ServiceController instance. これは、サービスコントロールマネージャー (SCM) の Microsoft 管理コンソールスナップインではカスタムコマンドがサポートされていないため、役に立ちます。This would be useful, because the Service Control Manager (SCM) Microsoft Management Console snap-in does not support custom commands.

ServiceControllerインスタンスを作成した後、このインスタンスの2つのプロパティを設定して、通信に使用するサービスを識別する必要があります。コンピューター名と、制御するサービスの名前です。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)

適用対象

こちらもご覧ください