サービスに関する情報を取得・操作するには、「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)); } }
サービスはかなりの数が登録されているので、一覧を取得できるといろいろ使い道がありそうです。