.NET TIPS

Windowsサービスを開始/停止/一時停止/再開するには?

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

 Windowsサービスの制御(開始、停止、一時停止、再開など)はWindowsの管理ツールからGUIにより可能だが、.NETのクラス・ライブラリにはそれを行うためのServiceControllerクラス(System.ServiceProcess名前空間)が用意されている。このクラスを使えば、プログラムからも簡単にWindowsサービスを制御することができる。

 ServiceControllerクラスを使ってWindowsサービスを開始/停止/一時停止/再開するには、まずコンストラクタにサービス名(例えば、「IISAdmin」)を指定してインスタンスを生成する。Windowsサービスのサービス名は、以下の画面の例のように、サービスのプロパティから確認できる。

Windowsサービスのサービス名の確認方法
[スタート]メニューから[コントロール パネル]−[管理ツール]−[サービス]を開き、表示された[サービス]管理ツールで目的のサービスをダブルクリックすると、このようなプロパティ画面が表示される。この例では「IISADMIN」というサービス名であることが確認できる。

 次にServiceControllerオブジェクトが持つ、次のいずれかのメソッドを呼び出せばよい(いずれもパラメータはない)。

  • 開始:Startメソッド
  • 停止:Stopメソッド
  • 一時停止: Pauseメソッド
  • 再開:Continueメソッド

 また現在のサービスの状態を確認するには、ServiceControllerオブジェクトのStatusプロパティの値をチェックすればよい。この値はServiceControllerStatus列挙体(System.ServiceProcess名前空間)で定義されている値になる(詳しくは次の表を参照してほしい)。

メンバ 説明
StartPending 開始しようとしているところ
Running 開始
StopPending 停止しようとしているところ
Stopped 停止
PausePending 一時停止しようとしているところ
Paused 一時停止
ContinuePending 再開しようとしているところ
ServiceControllerStatus列挙体の値

 次のサンプル・プログラムは、以上の内容を利用したものだ。このプログラムでは、IIS Adminサービスの状態をチェックし、それが「一時停止」の状態であればサービスを「再開」し、それ以外であれば「一時停止」する。

using System;
using System.ServiceProcess;

namespace ConsoleApplication1
{
  class Class1
  {
    [STAThread]
    static void Main(string[] args)
    {
      ServiceController sc = new ServiceController("IISAdmin");

      if (sc.Status == ServiceControllerStatus.Paused)
      {
        sc.Continue(); // 再開
        //sc.Start();  // 開始
      }
      else
      {
        sc.Pause();  // 一時停止
        //sc.Stop();   // 停止
      }
    }
  }
}
Imports System.IO
Imports System.ServiceProcess

Module Module1

  Sub Main()
    Dim sc As New ServiceController("IISAdmin")

    ' サービス状態の確認
    If sc.Status = ServiceControllerStatus.Paused Then
      sc.Continue() ' 再開
      'sc.Start()  ' 開始
    Else
      sc.Pause()  ' 一時停止
      'sc.Stop()   ' 停止
    End If
  End Sub

End Module
Windowsサービスを開始/停止/一時停止/再開するサンプル・プログラム(上:C#、下:VB.NET)

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

カテゴリ:クラス・ライブラリ 処理対象:Windowsサービス
使用ライブラリ:ServiceControllerクラス(System.ServiceProcess名前空間)
使用ライブラリ:ServiceControllerStatus列挙体(System.ServiceProcess名前空間)
 
この記事と関連性の高い別の.NET TIPS
Windowsサービスのサービス名を列挙するには?
[Silverlight 2]ASP.NET開発サーバでclientaccesspolicy.xmlを利用するには?
[ASP.NET]WebフォームからAmazon 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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH