|
.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への参照を追加する必要がある。
カテゴリ:クラス・ライブラリ 処理対象:Windowsサービス
使用ライブラリ:ServiceControllerクラス(System.ServiceProcess名前空間)
使用ライブラリ:ServiceControllerStatus列挙体(System.ServiceProcess名前空間) |
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間