LoginSignup
3
4

More than 3 years have passed since last update.

C#でWindows Serviceのインストール処理を実装する

Posted at

概要

Windows Seriviceを過去にC++で開発していた時は、
インストール処理も実装していました。

C#でのWindows Service開発では、テンプレートがあって、
サービス自体はとても簡単に作成できますが、
なぜかテンプレートにはインストール処理は実装されていなくて。
今回はその処理を実装した話。

やること

テンプレートで生成されたコードから変更した点を記載します。

・Main関数に引数を追加し、起動時引数での分岐を作成
・起動時引数で「install」が指定された場合に、インストール処理を実行するようにする。
 ※XXXXXXXXServiceが開発するサービスのクラス名
 インストール処理は、実行ファイル名を取得して
 ManagedInstallerClassクラスのInstallHelper関数を呼び出すだけ。

Program.cs

namespace XXXXXXXXService
{
    static class Program
    {
        static void Main(string[] args)
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                        new XXXXXXXXService()
            };

            switch (args[0])
            {
                case "install":
                    string[] args = { System.Reflection.Assembly.GetExecutingAssembly().Location };
                    ManagedInstallerClass.InstallHelper(args);
                    break;

                default:
                    ServiceBase.Run(ServicesToRun);
                    break;
            }
        }
    }
}

あ、Program.csに以下も追記しておいてくださいね。

Program.cs
using System.Configuration.Install;

起動時引数にinstallを指定して実行してみます。
※管理者権限で実行してください。
 また、Visual Studioから実行する際は、Visual Studioを管理者権限で実行してくださいね。

そうすると、以下のような画面が表示されます。
image.png

今回は管理者権限のあるユーザー名とパスワードを入力したのですが、
ここで注意点があります。

ユーザー名は先頭にコンピューター名+¥マークをつける必要があります。
例えば、コンピューター名がaaa、ユーザー名がbbbであれば、
 aaa¥bbb
をユーザー名に入力します。

なお、コンピューター名は設定->システム->バージョン情報で確認できます。
image.png

このソースでは、既にインストールされているかの確認処理や、エラーになった時の処理は記載していないので、
必要に応じて実装してください。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4