2012-05-07 9 views
1

私が作ったコンソールプログラムで、実行中のサービスを停止しようとしています。 これは私のコードです:サービスを停止する

ServiceController sc = new ServiceController(ServiceName, "."); 
sc.Stop(); 

私はその後停止に変身するために、サービスの状態を待つが、これが起こることはありません。 StopPendingがあると思われ、決してGoto Stoppedしません。 Services.mscにチェックマークを付けると、停止したものとしてリストされ、タスクマネージャーではプロセスは終了しています。

永遠に保留になりますか?私は何か間違っているのですか? 私はそこに何かを変更する必要がある場合、私はサービスのコードも持っています。

答えて

5

私は何か間違っていますか?

あなたはサービスを停止した後waitingを試みることがあります。

sc.Stop(); 
sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(25)); 

WaitForStatusメソッドは、指定された状態に到達するためにサービスを待つか、返す前に期限切れに指定されたタイムアウトのためになります。

+0

私はすでに待っています。それは保留から変更されていないようです。 – Nicolai

+0

実際、これはうまくいくようです。私は自分自身をチェックしていましたが、whileループで、sc.statusに尋ねました。私はなぜそれが決して保留から変わったのか分からない。 WaitForStatusに変更すると修正されました。 – Nicolai

+0

@ Nicolay、おそらく状態がキャッシュされていました。ステータスを更新する 'sc.Refresh()'メソッドがあります。しかし、WaitForStatusはより良い解決策です – HugoRune

関連する問題