プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (2件)

ServiceBaseクラスのOnStart、OnStopメソッドは、それぞれサービスの開始、サービスの停止命令をSCMから受けたときに実行されるメソッドですが、これらのメソッドから戻った時にその命令が完了したものとみなされます。

そのため、常駐中に実行したい処理をOnStartに書いてしまうと、サービスステータスは「開始処理中」のまま戻ってこなくなります。

また、OnStart、OnStopなどのメソッドを実行するのは、SCMが所有するスレッドが呼び出しを行うため、SCM自体も他の動作ができなくなる恐れがあります。よってここに常駐時の処理を書くことはできません。

常駐時に処理を行わせるためには、OnStartメソッドで別のスレッドを起動する処理を書き、そのスレッドで行うようにします。同様にOnStopメソッドでは、そのスレッドを終了させる処理を書きます。必然的にマルチスレッドを使用することになるので、それらの知識が必要になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/01 23:54

>開始後の処理をどこに記述していいのかという質問です。



例えば、System.Timers.TimerのElapsed イベントに記述する。
http://msdn.microsoft.com/ja-jp/library/zt39148a …
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/01 23:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!