いろいろ思考錯誤して、
試してみたのですが、分からないの質問させていただきます。
【現象】
1.プロジェクトの新規作成でATLプロジェクトを選択する。
2.ATLプロジェクト ウィザードのアプリケーションの設定をサービス(EXE)を選択(他の項目はデフォルト)
3.PreMessageLoop()とPostMessageLoop()をオーバーライドして、以下のコードを書く。
HRESULT CServiceTestModule::PreMessageLoop(int nShowCmd)
{
HRESULT hr = __super::PreMessageLoop(nShowCmd);
#if _ATL_VER == 0x0710
if (SUCCEEDED(hr) && !m_bDelayShutdown) {
hr = CoResumeClassObjects();
}
#endif
return hr;
}
HRESULT CServiceTestModule::PostMessageLoop()
{
return __super::PostMessageLoop();
}
4.コンパイルを行い、サービスとして実行する。
【問題点】
1.サービスとして開始した場合、以下のメッセージがイベントログのアプリケーションに出力される。
イベント ID (0) (ソース 『アプリケーション名』 内) に関する説明が見つかりませんでした。
リモート コンピュータからメッセージを表示するために必要なレジストリ情報
またはメッセージ DLL ファイルがローカル コンピュータにない可能性があります。
この説明を取得するために /AUXSOURCE= フラグを使用することができる可能性があります。
詳細については、ヘルプとサポートを参照してください。次の情報はイベントの一部です:
Service started.
2.サービスの終了時にも同様のメッセージが出力される。
イベントIDを設定していないため、長々とイベントログに出力されるのは、下記のURLで解決できるのですが、
http://www.monyo.com/technical/products/evt_messages/
「Service started.」と「Service stopped.」の出力を抑止したいのですが
どのように処理をしたら良いのでしょうか?
Visual Studio 6.0で作成すると、
LogEvent(_T("Service started"));
とあるので、その部分をコメントアウトすれば出力されないのですが、
Visual Studio.net 2003では、どのように処理すればよいのでしょうか?
なにかアドバイスがあればお願いします。
【開発環境】
コンパイラ: Visual Studio.net 2003
OS : Windows XP Professional
普段私はサービス作る時は自前で作るので ATLって使った事無いんですよ。
そんな訳で的確な事を言えないかも知れませんが。
ざっとATLのソース見てみました。
ログを吐き出してるのは atlbase.h 内です。
これをインクルードしてるのは stdafx.h です。
一番簡単なのは、 atlbase.h をコピーして別ソースにし、
LogEvent()をコールしてる行をコメントアウトするか、
LogEvent及びLogEventExを何もしない関数にしちゃって
stdafx.hで atlbase.hをインクルードしてる行を自前の
my_atlbase.h とかに変更しちゃう・・・かな?
早速アドバイス通り試したら、
出なくなりました。ありがとうございます。
ですが、力技過ぎる感じがします。
他に良い方法はないのでしょうかねぇ?
ツイート | ![]() |