.NET コードから .NET Windows サービスにカスタム コマンドを送信するにはどうすればよいでしょうか? 質問する

.NET コードから .NET Windows サービスにカスタム コマンドを送信するにはどうすればよいでしょうか? 質問する

次のリンクのように、C# コードを使用してサービスを停止、開始、および「停止してから開始」することができます。

http://www.csharp-examples.net/restart-windows-service/

OnStartおよびを実装する .NET サービスを作成しましたOnStop。ただし、停止して起動するだけよりも複雑な「スマート再起動」機能を実装する必要があります。ダウンタイムを数秒に抑える必要があります (ただし、この場合、停止 + 起動は正常に実行すると数分かかるため、正常に実行する必要があります)。また、システムの一部を再起動/更新中に他の部分を使用できるようにする必要があります。

簡単に言うと、この機能の実装に取り​​掛かる前にOnSmartRestart、別の C# アプリケーションからこの呼び出しを簡単に呼び出す方法があることを確認したいと思います。

この機能は重要ですが、危険です。この機能をかなり隠蔽し、ある程度安全にし、シンプルに保ち、Windows サービスが通常の作業を実行していて再起動していないときに、Windows サービスのパフォーマンスに無視できる影響が及ばないようにしたいと考えています。

何らかのファイルをポーリングしたり、ポートを開いたりする必要があり、そのために CPU を大量に消費するのであれば、それは良い解決策とは言えません。また、これをできるだけシンプルにしておきたいと考えています (繰り返しになって申し訳ありません)。

ベストアンサー1

サービスに「コマンド」を送信するには、サービス コントローラー.ExecuteCommand:

const int SmartRestart = 222;

var service = new System.ServiceProcess.ServiceController("MyService");
service.ExecuteCommand(SmartRestart);
service.WaitForStatus(ServiceControllerStatus.Running, timeout);

System.ServiceProcess.dll アセンブリへの参照を追加する必要があります。

サービスはコマンドに反応してオーバーライドすることができますServiceBase.OnCustomCommand:

protected override void OnCustomCommand(int command)
{
    if (command == SmartRestart)
    {
        // ...
    }
}

おすすめ記事