サービスに関する情報を取得・操作するには、「System.ServiceProcess名前空間」で取り扱います。
サービスの一覧を取得する
デバイス ドライバ以外のサービスの一覧をローカル コンピュータから取得するには、パラメータを指定せずに GetServices メソッドを呼び出します。
System.ServiceProcess.ServiceController[] services; services = System.ServiceProcess.ServiceController.GetServices();
ServiceController クラスの GetServices メソッドを使用して、特定のコンピュータにあるサービスの一覧を取得できます。
System.ServiceProcess.ServiceController[] services; services = System.ServiceProcess.ServiceController.GetServices( "machinename" );
デバイス ドライバ サービスの一覧をローカル コンピュータから取得するには、パラメータを指定せずに GetDevices メソッドを呼び出します。
System.ServiceProcess.ServiceController[] services; services = System.ServiceProcess.ServiceController.GetDevices();
デバイス ドライバ サービスの一覧を特定のコンピュータから取得するには、GetDevices メソッドを呼び出し、対象のコンピュータをパラメータに文字列で指定します。
System.ServiceProcess.ServiceController[] services; services = System.ServiceProcess.ServiceController.GetDevices( "machinename" );
取得した配列のSystem.ServiceProcess.ServiceControllerクラスはサービスの情報を持っています。
System.ServiceProcess.ServiceControllerクラス
System.ServiceProcess.ServiceController.GetServicesや、System.ServiceProcess.ServiceController.GetDevicesで取得される配列の型(System.ServiceProcess.ServiceControllerクラス)には主に下記のようなプロパティがあります。
| DisplayNameプロパティ | サービスの表示名 |
| ServiceNameプロパティ | サービスを識別する名前 |
| ServiceTypeプロパティ | サービスの種類 |
| Statusプロパティ | サービスのステータス |
| CanPauseAndContinueプロパティ | 一時中断および再開できるかどうかを示す値 |
| CanShutdownプロパティ | システムのシャットダウン時に、サービスにそれを通知する必要があるかどうかを示す値 |
| CanStopプロパティ | サービスをいったん開始してから停止できるかどうかを示す値 |
サンプルプログラム
ローカルコンピュータのサービスの一覧を取得して、その情報を表示するサンプルプログラムです。
static void Main(string[] args)
{
System.ServiceProcess.ServiceController[] services;
// デバイス ドライバ サービス以外のサービスを取得
services = System.ServiceProcess.ServiceController.GetServices();
int count = 0;
foreach(System.ServiceProcess.ServiceController c in services)
{
count++;
// サービスに関する情報を
// 「番号」 「表示名」 「サービスを識別する名前」「サービスの種類」
// 「サービスのステータス」「一時中断および再開できるかどうかを示す値」
// 「システムのシャットダウン時に、サービスにそれを通知する必要があるかどうかを示す値」「サービスをいったん開始してから停止できるかどうかを示す値」
// の順に表示します
Console.WriteLine(string.Format("[{0}]: \"{1}\" \"{2}\" \"{3}\" \"{4}\" \"{5}\" \"{6}\" \"{7}\""
, count, c.DisplayName, c.ServiceName, c.ServiceType, c.Status, c.CanPauseAndContinue, c.CanShutdown, c.CanStop));
}
}
サービスはかなりの数が登録されているので、一覧を取得できるといろいろ使い道がありそうです。

