C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: スプーラー サービスの再起動について


(過去ログ 53 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■29945 / inTopicNo.1)  スプーラー サービスの再起動について
  
□投稿者/ Jitta on the way (247回)-(2008/12/16(Tue) 21:52:53)

分類:[Windows 全般] 

こんにちは、Jittaです。
なんか、似たタイトルの質問がありますが、別件です。


スプーラーが LoadLibrary しているファイルを置き換えるため、Win32 API を使ってスプーラー サービスの再起動をしています。この時、サービスを停止させた後に再起動させられない時があります。

1.ControlService で停止命令を送った後、
2.QueryServiceStatus で、SERVICE_STOPPED になるまで待ちます。
3.直後に StartService をします。
4.QueryServiceStatus で、SERVICE_RUNNING になるのを待ちます。

たいていの場合、期待通りに動くのですが、特に Windows 2000 で顕著に、4で SERVICE_STOPPED になります。この時、Query... の戻り値は 0 で、引数の方のエラーコードに 12 がはいります。
必ず、という訳ではなく、原因がわかりません。ただ、3の前に数秒 Sleep を入れると、発生しない(あるいは頻度が下がる)ことがわかっています。

サービスの起動、停止には、約30秒の猶予期間があることは、何処かで読んだのですが、サービスの状態を変更する(この場合、停止→起動)にも、猶予期間が必要なのでしょうか?
引用返信 編集キー/
■29980 / inTopicNo.2)  Re[1]: スプーラー サービスの再起動について
□投稿者/ osyou (1回)-(2008/12/17(Wed) 12:32:13)
> サービスの起動、停止には、約30秒の猶予期間があることは、何処かで読んだのですが、サービスの状態を変更する(この場合、停止→起動)にも、猶予期間が必要なのでしょうか?

  必要です。
  マシン(CPU)の性能にも影響されますので、その辺は、臨機応変に・・・

※ Print Spoolerサービスに依存関係のある他サービスがあれば、そのサービス
  の停止にも同期する必要があるので、安全に行うのであれば、依存関係のあ
  る他サービスも取得し、そのサービスを停止させた後、Spoolerサービスを
  停止させ、所定の処理を行い・・・Spoolerサービスを起動し依存関係のある
  停止させた他サービスを起動する。と言うことになります。

以上。
引用返信 編集キー/
■29987 / inTopicNo.3)  Re[2]: スプーラー サービスの再起動について
□投稿者/ Jitta (560回)-(2008/12/17(Wed) 12:58:54)
2008/12/17(Wed) 12:59:37 編集(投稿者)

No29980 (osyou さん) に返信
>>サービスの起動、停止には、約30秒の猶予期間があることは、何処かで読んだのですが、サービスの状態を変更する(この場合、停止→起動)にも、猶予期間が必要なのでしょうか?
>
>   必要です。
>   マシン(CPU)の性能にも影響されますので、その辺は、臨機応変に・・・
>
> ※ Print Spoolerサービスに依存関係のある他サービスがあれば、そのサービス
>   の停止にも同期する必要があるので、安全に行うのであれば、依存関係のあ
>   る他サービスも取得し、そのサービスを停止させた後、Spoolerサービスを
>   停止させ、所定の処理を行い・・・Spoolerサービスを起動し依存関係のある
>   停止させた他サービスを起動する。と言うことになります。
>
> 以上。

情報ありがとうございます。
どうも、OS に依存するようです。

依存関係については、問題になり、解決させています。ありがとうございます。
blogs.wankuma.com/jitta/archive/2008/08/29/154687.aspx
blogs.wankuma.com/jitta/archive/2008/09/03/155415.aspx


簡単に再現させる方法がありました。バッチファイルです。

NET STOP SPOOLER
NET START SPOOLER

この2行を書いたバッチファイルを実行させます。Windows 2000 では、確実に再現します。
XP では、再現させられませんでした。

問題になっているのは Windows 2000 で、、、ん〜、臨機応変に、ですかorz
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -