6

Windows サービスの形式でいくつかのレガシー コードを見ています。

彼らの OnStop() メソッドでは、単にイベント ログに書き込みますが、オブジェクトのクリーンアップやスレッド終了の制御がないことに気付きました。サービスの起動時に開始される 2 つのバックグラウンド スレッドがあるため、このサービスは実際に停止するのでしょうか? もしそうなら、スレッドは正しく閉じられていますか?

stop メソッドはプロセスを物理的に終了させて​​いるのでしょうか、それとも単に論理的な停止であり、実装されていない場合は実際には何もしませんか?

4

3 に答える 3

1

サービスを停止することは、サービスを終了することと同じではありません。これは論理的な条件です。管理者は、サービスが開始された後は何をするのもやめることを期待しています。したがって、あなたのサービスは、彼が次に何をしようとしても邪魔になりません. ディレクトリのバックアップや構成ファイルの編集などを言います。

これを実際に実装する必要はありませんまた、Windows がそれを強制することもありません。サービス マネージャーは、ユーザーが停止したことを報告したときにその言葉を受け入れ、それ以外の場合は何もすることを妨げません。しかし、もちろん、管理者を混乱させるリスクがあります。

于 2013-02-01T17:22:18.543 に答える
1

サービスが停止するとOnStop()メソッドが呼び出され、ここでオブジェクトをクリアしてスレッドなどを停止できます。サービスが停止したときにスレッドが特別なことをする必要がない場合は、OnStop メソッドを終了できます。

OnStop は、派生クラスでオーバーライドされることが想定されています。サービスを有効にするには、OnStart と OnStop の両方をサービス クラスmsdnに実装する必要があります。

于 2013-02-01T16:56:03.887 に答える
0

最初の質問に答えるには、プロセスを終了します。ただし、一般的なシナリオでは、スレッドをサービスで実行したままにしておくと停止しますが、スレッドのためにプロセスがまだ存在するため、クリーンアップ コードを実装する必要があります。私は左スレッドで同じ経験をしたので、プロセスの終了を防ぐことができるスレッドクリーンアップコードとその他のリソースを実装する必要があります。

于 2013-02-01T16:55:24.620 に答える