|
分類:[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秒の猶予期間があることは、何処かで読んだのですが、サービスの状態を変更する(この場合、停止→起動)にも、猶予期間が必要なのでしょうか?
|