- 132 名前:122 mailto:sage [2007/06/05(火) 20:36:52 ]
- >>121
ちょっと試してみた。 CServiceModule::Init()で、 m_status.dwControlsAccepted = SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN; に書き換えただけで、 CServiceModule::Handler()の、 case SERVICE_CONTROL_SHUTDOWN: に来たよ。 ただ、イベントログに書き込むのは、最初から試さずに、 CloseHandle(CreateFile("適当なパス\\ServiceControlShutdownに到達したよ.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) ; とやって、ファイルが作られたかどうかチェックした。 だから、可能性1っぽいよ。 可能性2については、ゴメン。 VC6が生成したコードが、SetServiceStatusを呼んでた。 今回の件には影響ないと思うけど、Handlerが呼ばれた場合には、 ステータスが変化しなくても、必ずSetServiceStatusを呼ぶことになってる。 ところが、VC6が生成したコードは、 case SERVICE_CONTROL_STOP: でしか呼んでいない。 ついでに、もう一つ。CServiceModule::ServiceMain()の SetServiceStatus(SERVICE_STOPPED); LogEvent(_T("Service stopped")); これは、逆の順序のほうがいいと思う。 というのも、SERVICE_STOPPEDにセットした時点でスレッドが終了して、次の行が実行されないことがあるから。
|

|