![Windows サービス: カスタム停止コマンドの指定](https://rvso.com/image/726828/Windows%20%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%3A%20%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E5%81%9C%E6%AD%A2%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E6%8C%87%E5%AE%9A.png)
弊社には、多数のサードパーティ リソースを混乱させるカスタム アプリケーションがあります。終了するときには、いわば「リースを放棄」する必要があります。
アプリ自体は .NET Core で記述されており、真のマルチプラットフォーム実行を目標としています。LinuxExecStop
の Systemd のメカニズムを使用して、カスタム ヘルパー スクリプト () を呼び出しますmyapp cli shutdown
。
このヘルパー スクリプトは Windows にも存在しますが、実際に Windows のサービス管理とどのように連携させるかは不明です。NSSM を使用してサービス自体を継続的に稼働させていますが、これが実現可能であればオプションを検討します。
Windows のカスタム停止コマンドについて Google で検索したり StackExchange で検索したりしてみましたが、何も見つかりません。
これを実現する方法を誰か知っていますか?
答え1
NSSMの「シャットダウン」タブの設定サービスが停止要求を受け取ったときに何が起こるかを制御します。Control-C およびプロセスの終了オプションは役に立たないと思われますが、アプリケーションは .NET であるため、WM_CLOSE
および/またはを受信して応答できるはずですWM_QUIT
。詳細はわかりませんが、これは .NET Core でも可能だと思います。
のApache Commonsデーモンより適しているかもしれません。主に Java で記述されたサービス用に設計されていますが、任意の実行可能ファイルも実行でき、オプションを使用する--StopImage
と、サービスが停止要求を受け取ったときにコマンド ラインを実行できます。
しかし、NSSMやApache Commons Daemonなどのサードパーティのラッパーを使用するよりも、アプリケーションを実際にサービスにする方がエレガントです。.NETでは簡単ですが、.NET Coreでは難しいですが、Googleで検索するとVisual Studio 2017 で .NET Core Windows サービスを作成する方法これで始めることができます。
サービスを直接実装する方法の詳細が必要な場合は、システム管理というよりも Windows プログラミングに関する内容であるため、Stack Overflow で質問することをお勧めします。