• ベストアンサー

Windowsサービスの処理

Windowsサービスの処理 OnStartの処理はサービス開始の処理ですが、開始後の処理などもOnStartの関数内に処理を記述するかたちでいいのでしょうか?? それともOnStartなどのように何かOnStart後に実行される関数が存在するのでしょうか?? 開始後の処理をどこに記述していいのかという質問です。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

ServiceBaseクラスのOnStart、OnStopメソッドは、それぞれサービスの開始、サービスの停止命令をSCMから受けたときに実行されるメソッドですが、これらのメソッドから戻った時にその命令が完了したものとみなされます。そのため、常駐中に実行したい処理をOnStartに書いてしまうと、サービスステータスは「開始処理中」のまま戻ってこなくなります。 また、OnStart、OnStopなどのメソッドを実行するのは、SCMが所有するスレッドが呼び出しを行うため、SCM自体も他の動作ができなくなる恐れがあります。よってここに常駐時の処理を書くことはできません。 常駐時に処理を行わせるためには、OnStartメソッドで別のスレッドを起動する処理を書き、そのスレッドで行うようにします。同様にOnStopメソッドでは、そのスレッドを終了させる処理を書きます。必然的にマルチスレッドを使用することになるので、それらの知識が必要になります。

jam-best
質問者

お礼

回答ありがとうございます。 やっぱりOnStartは開始するまでの処理ですよね。 理解しました、ありがとうございます。

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

>開始後の処理をどこに記述していいのかという質問です。 例えば、System.Timers.TimerのElapsed イベントに記述する。 http://msdn.microsoft.com/ja-jp/library/zt39148a.aspx

jam-best
質問者

お礼

回答ありがとうございます。 納得することができました。

関連するQ&A