.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参照の追加]ダイアログをカスタマイズするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間