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 または Web アプリケーションを作成でき ServiceController ます。 これは、サービスコントロールマネージャー (SCM) の Microsoft 管理コンソールスナップインではカスタムコマンドがサポートされていないため、役に立ちます。

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

注意

既定で 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

ComponentISite を取得または設定します。

(継承元 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()

Component の名前 (存在する場合) を格納する String を返します。 このメソッドはオーバーライドできません。

(継承元 Component)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
WaitForStatus(ServiceControllerStatus)

サービスが指定したステータスになるまで、無期限に待機します。

WaitForStatus(ServiceControllerStatus, TimeSpan)

サービスが指定したステータスになるまで、または指定したタイムアウトの期限が切れるまで待機します。

イベント

Disposed

Dispose() メソッドの呼び出しによってコンポーネントが破棄されるときに発生します。

(継承元 Component)

適用対象

こちらもご覧ください