2009-03-09 22 views
1

カスタムサービスの再起動をスケジュールするには、 net stop、net startのバッチファイルを使用します。Windowsサービスの再起動

net stopを実行すると、実行中の処理が中止されます すぐに?

処理の途中で何が起きるのだろうか?

マルコム

+0

無期限に実行し続けるのではなく、サービスを再起動する必要がある場合は、おそらく問題があります。すべての時間それらを再起動するのではなく、その問題を修正してください。 –

答えて

0

本当にサービスによって異なります。私はほとんどが停止する前に良い状態になるように努力すると思う。それは殺人ではない。

1

あなたのコードを非同期的に呼び出し、それに対処するのはあなた次第です。あなたはきれいにしたり、中止したりすることができます。

1

本当にサービスがどのように実装されているかによって異なります。 "net stop"は本質的にサービスを呼び出し、 "あなたは優しく止めますか?"ほとんどのサービスはこのコマンドに従い、タイムリーに停止します。しかし、遵守しておらず、止めることを拒否する悪いサービスがあります。この場合、ネットストップはこれ以上の動作を行いません。

0

サービスは、(RegisterServiceCtrlHandlerを介して)イベントを受信するために登録します。 net stopを実行すると、登録されたコールバックはSERVICE_CONTROL_STOP操作でコールバックを受け取ります。サービスがそのコールバックにどのように応答するかは、サービスの実装に依存します。サービスが通常のアプリケーションシャットダウン処理を行うことは理にかなっています。

0

他にも述べたように、net stopを呼び出すと、WindowsサービスのOnStopが呼び出されます。 OnStopがアプリ内のすべてのスレッドを強制終了しない場合、またはすべてを正しく停止しない場合、サービスは停止しない可能性があります。 (これは私たちのWCFサービスの1つで、OnStopのServiceHostを閉じなかったので、アプリケーションは私たちのコマンドで停止しませんでした。手でプロセスを終了する必要があります)

私が見た共通のパターンの1つは、サービスでstopを呼び出すことです。タイムアウト(10秒)内に停止しない場合は、強制的にプロセスを終了してください。バッチファイルの代わりに、PowerShellにはサービスを扱うためのかなり良いサポートがあります。

+0

このコメントは.NETサービス固有のものだと思います - 非.NETサービスが内部的にどのように停止されているかわかりません... –

関連する問題