Windows サービス: カスタム停止コマンドの指定

Windows サービス: カスタム停止コマンドの指定

弊社には、多数のサードパーティ リソースを混乱させるカスタム アプリケーションがあります。終了するときには、いわば「リースを放棄」する必要があります。

アプリ自体は .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 で質問することをお勧めします。

関連情報