単に実行するアプリケーションをサービスとして登録することは容易ではありません。
本来、Windowsサービスはそれ専用に作成する必要があります。サービスとして作成されたアプリケーションは、通常のアプリケーションにあるようなエントリーポイント(main)から開始する、HUPシグナル等で停止するという仕組みではありません。サービスの起動命令や停止命令を受けたときにどうするのか、そもそも停止が可能であるか、一時停止などはどう動くか等を個別に定義したアプリケーションでなければなりません。そのため、通常はVisual Studio等を用いてC++やC#等で作成することになります。
では、単に実行するような作りになっているアプリケーションをサービスとして実行したい場合はどうするかというと、二つの手段があります。
- サービスとして登録できるような形に作成し直す。
- 単にコマンドを実行するだけのラッパーを使用する。
Javaの場合、Javaには本来Windowsサービス用のAPIが用意されていないため、ライブラリとそれを使用するラッパーを使う必要があります。Apache Commons Daemonはそのようなライブラリの一つです。Apache Common Deamonを組み込む形で元々のコードを改変するか、元々のコードを参照する形で、Apache Common Daemonを使ったJavaから必要なものを呼び出すという形になります。実際に登録するときはJavaそのものを登録できないため、Apache Common Daemonに付属したprunsvr.exe(これ自体はJavaを呼び出すだけの薄いラッパー)を登録します。これは1.の方法となります。
実装例: How to create a Windows Service for Spring Boot Application by Procrun - JavaSampleApproach
元々のコードを改変をしたくない場合は単にコマンドを実行するだけのラッパーを使うことになります。たとえばwinswのようなツールを使います。ただし、サービスとして作られている場合に比べて、どうしてもサービス監視という面では完全ではないところが出てくる可能性があります。
実装例: Spring Boot as a Windows Service in 5 minutes - javabullets
単にPC起動時に実行したいというのであれば、もっと簡単な方法があります。それはシステム起動時に実行するファイルとして登録することです。いくつか方法があります。
- 「タスク スケジューラ」でトリガーを「システム起動時」として登録する。
- グループポリシーのスタートアップスクリプトとして登録する。
また、ログオン時にユーザーの実行権限で起動したいというのであれば、レジストリHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
に登録するという方法もあります。
サービスとは違って稼働監視やサービス停止時の再起動処理などは細かく制御出来ませんが、単純に実行したいだけであれば、こちらの方が簡単に実現できます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/14 08:41