C#でWindowsサービスを操作しよう


33e9bd547f720f3aeaafbadba3323e95_m

はじめまして、アプリケーションエンジニアの山田です。

最近C#に触れてないので、今回は「C#」と「Windowsサービスの操作の仕方」について、自分の復習も兼ねてご紹介させていただきます。

Windowsサービスって何?

まず「Windowsサービス」ですが、何ものかを誤解を恐れず簡単に言うと、裏側でずっと動いている見えない特殊なアプリです。

通常は、Windowsの管理ツールからGUIにより操作します。
※「コントロールパネル ⇒ 管理ツール ⇒ サービス」と選択していくとあります。
また、CUIによる操作も可能ですが、今回は割愛します。

実際の使用例

どのように使用するかは、皆様の想像の限りたくさんあると思います。
■使用の一例
以前仕事で業務システムのメンテナンスをする際に、Windowsサービスを止めたりする必要があり、業務システムのメンテナンス画面で、開始や停止などが簡単に操作できる機能を作成する際に使用しました。
他にもアプリ起動と同時に必要なWindowsサービスを開始させたり、終了時に停止させたりなどしたい時に使用すると便利かもしれません。

Windowsサービスの操作の仕方

それでは、本題です。
今回、使用するものはServiceControllerクラスです。
System.ServiceProcess名前空間に用意されています。
最初から参照はされていないので、忘れずに参照してください。

これを使うことで、「開始」、「一時停止」、「停止」、「再開」、「Windowsサービスの情報取得」などができてしまいます。

ちなみに、Windowsサービスの操作なので、基本的に管理者権限が必要だったりします。
なので管理者権限にて動作させないと、動作ができなかったりします。
サンプルコード
以下、サンプルコードとなります。

using System;
using System.ServiceProcess;

namespace ServiceControllerSample
{
    class Program
    {
        static void Main(string[] args)
        {
            //usingステートメントは範囲から抜けた際に自動的にDisposeなどしてくれるので便利です。
            //「任意のWindowsサービス」は動作したいサービス名を指定してください。
            using (ServiceController sc = new ServiceController("任意のWindowsサービス名"))
            {
                //プロパティ値を更新
                sc.Refresh();
                
                //起動中
                if (sc.Status == ServiceControllerStatus.Running)
                {
                    // 停止
                    sc.Stop();
                    // 一時停止
                    //sc.Pause();
                }
                //停止中
                else if (sc.Status == ServiceControllerStatus.Stopped)
                {
                    // 開始
                    sc.Start();
                }
                //一時停止中
                else if (sc.Status == ServiceControllerStatus.Paused)
                {
                    // 再開
                    sc.Continue();
                    // 停止
                    //sc.Stop();
                }
            }
        }
    }
}

以上、簡単ですが「C#」と「Windowsサービスの操作の仕方」についてでした。

株式会社ライズウィル

株式会社ライズウィル

〒110-0016
東京都台東区台東1-27-11 やわらぎビル2F
TEL : 03-4590-3200
FAX : 03-4590-3201
E-Mail : info@risewill.co.jp
URL : https://www.risewill.co.jp

海上コンテナ輸送管理システム「海コン魂!」
海コン魂!
面接予約・スタッフ管理システム「WebWORKS.」
WebWORKS.