.NET TIPS

Windowsサービスのサービス名を列挙するには?

デジタルアドバンテージ 一色 政彦
2005/10/14

 「TIPS:Windowsサービスを開始/停止/一時停止/再開するには?」では、.NETのプログラムから「IIS Admin」などのWindowsサービスを制御する方法について紹介した。この方法では、最初にServiceControllerクラス(System.ServiceProcess名前空間)のコンストラクタに、サービス名(例えば、「IISAdmin」)を指定する必要があった。サービス名を知るには、前掲のTIPSで説明されているように、サービスのプロパティを参照すればよい。

 しかし、このサービス名をプログラムで直接取得して使いたいというケースもあるだろう。そのような場合には、ServiceControllerの静的メソッドであるGetServicesメソッドを呼び出せばよい。GetServicesメソッドは戻り値としてServiceControllerオブジェクトの配列を返す。つまり各サービス情報をまとめて返すわけだ。なおGetServicesメソッドのパラメータにコンピュータ名を指定すればそのコンピュータの、指定しなければローカル・コンピュータの(デバイス・ドライバ・サービス以外の)すべてのサービスを取得できる。

 各サービスのサービス名を取得するには、この配列から1つずつServiceControllerオブジェクトを取り出し、そのServiceNameプロパティを参照すればよい。

 ちなみにサービスには、実際の「サービス名」だけでなく、エンド・ユーザーに分かりやすい表示を行うための「表示名」も用意されている。これはServiceControllerオブジェクトのDisplayNameプロパティを呼び出せば取得できる。

 以上の内容を実際に実装したのが、次のサンプル・プログラムだ。このプログラムは、ローカル・コンピュータのすべてのサービスのサービス名と表示名を一覧表示する。

using System;
using System.ServiceProcess;

namespace ConsoleApplication1
{
  class Class1
  {
    [STAThread]
    static void Main(string[] args)
    {
      ServiceController[] scSvcs = ServiceController.GetServices();

      // Windowsサービスのサービス名を列挙する
      foreach (ServiceController sc in scSvcs)
      {
        Console.WriteLine("\nサービス名:{0}", sc.ServiceName);
        Console.WriteLine("表示名:{0}", sc.DisplayName);
      }

      Console.ReadLine();
    }
  }
}
Imports System.IO
Imports System.ServiceProcess

Module Module1

  Sub Main()
    Dim scSvcs() As ServiceController = ServiceController.GetServices()

    ' Windowsサービスのサービス名を列挙する
    Dim sc As ServiceController
    For Each sc In scSvcs
      Console.WriteLine(vbCrLf & "サービス名:{0}", sc.ServiceName)
      Console.WriteLine("表示名:{0}", sc.DisplayName)
    Next

    Console.ReadLine()
  End Sub

End Module
Windowsサービスのサービス名を列挙するサンプル・プログラム(上:C#、下:VB.NET)

 なおこのサンプル・プログラムをビルドするには、System.ServiceProcess.dllへの参照を追加する必要がある。

 次の画面はこのサンプル・プログラムの実行結果である。

サンプル・プログラムの実行結果

 このようにしてサービス名をプログラムで列挙することで、任意のサービスを自由にユーザーに選ばせて、そのサービスをプログラムで操作することが可能になる。End of Article

カテゴリ:クラス・ライブラリ 処理対象:Windowsサービス
使用ライブラリ:ServiceControllerクラス(System.ServiceProcess名前空間)
関連TIPS:Windowsサービスを開始/停止/一時停止/再開するには?
 
この記事と関連性の高い別の.NET TIPS
Windowsサービスを開始/停止/一時停止/再開するには?
[Silverlight 2]ASP.NET開発サーバでclientaccesspolicy.xmlを利用するには?
[ASP.NET]WebフォームからAmazon Webサービスを利用するには?
[Web参照の追加]ダイアログをカスタマイズするには?
SQL Server 2005でネットワーク接続を有効にするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH