Ab.の日記: さーびすさーびす~
- C/C++ でスクラッチで起こす。
- VC++/ATL で CAtlServiceModuleT からクラスを派生させて作る。
- VC#/Windowsサービスプロジェクト から作る。
- (VB.Net/Windowsサービスプロジェクト から作る)
と沢山選択枝があって迷いますねー。
時間がたっぷりあればスクラッチで簡易フレームワークから起こして作るんだけど、それだけ手間をかけて作っても、あと何年使用可能なのか、何回再利用するのだろうか、と考えると二の足を踏みまくってしまうし…
VC# は試しに何もしないサービスを作ってインストールして起動してみたら、メモリ消費8Mとか言われて萎えるし…まー調べたら共通のランタイムが鬼のように読み込まれてたので .Net framework で作ったモノならそこら辺のメモリは共用されるだろうから、見た目ほど激しいものじゃないんだろうけど。
やっぱり現実的なのは ATL かなぁ…
って、プロジェクト試しに作ってみたら、サービスを登録してもサービス起動してくれないよ…
んで、色々ぐぐったら出てきました The Code Project - Migrating ATL service applications to Visual C++.NET - ATL の Phase 4 の第7項ですな。
つまり CAtlServiceModuleT の PreMessageLoop() にバグがあるので、派生クラスで override して workaround せよ、と。
HRESULT CDerivedServiceModule::PreMessageLoop(int nShowCmd) {
HRESULT hr = __super::PreMessageLoop(nShowCmd);
#if _ATL_VER == 0x0700
if (SUCCEEDED(hr) && !m_bDelayShutdown)
hr = CoResumeClassObjects();
#endif
return hr;
}
んで、空のサービスを動かしてみたら、消費メモリは2Mちょっと。
というわけで ATL で行ってみるかな…
さーびすさーびす~ More ログイン