C#

C# サービスの一覧を取得する

サービスに関する情報を取得・操作するには、「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));
    }
}

 

サービスはかなりの数が登録されているので、一覧を取得できるといろいろ使い道がありそうです。

 

タイトルとURLをコピーしました