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作成できます。 これは、Service Control Manager (SCM) Microsoft 管理コンソール スナップインがカスタム コマンドをサポートしていないために役立ちます。

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

注意

既定では、 MachineName ローカル コンピューターに設定されているため、インスタンスを別のコンピューターをポイントするように設定する場合を除き、変更する必要はありません。

通常、サービス作成者は、特定のコマンドに関連付けられているアクションをカスタマイズするコードを記述します。 たとえば、サービスには、コマンドに応答するコードを ServiceBase.OnPause 含めることができます。 その場合、タスクのカスタム処理は、システムが Pause サービスを一時停止する前に実行されます。

サービスが処理できるコマンドのセットは、そのプロパティによって異なります。たとえば、サービスのプロパティを にCanStopfalse設定できます。 この設定により、その特定の 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)

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

events

Disposed

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

(継承元 Component)

適用対象

こちらもご覧ください