イベントログ出力を抑止


C++初心者  2006-02-15 05:16:54  No: 60718

いろいろ思考錯誤して、
試してみたのですが、分からないの質問させていただきます。

【現象】
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


Toshi  2006-02-15 19:43:22  No: 60719

普段私はサービス作る時は自前で作るので ATLって使った事無いんですよ。
そんな訳で的確な事を言えないかも知れませんが。

ざっとATLのソース見てみました。
ログを吐き出してるのは atlbase.h 内です。
これをインクルードしてるのは stdafx.h です。
一番簡単なのは、 atlbase.h をコピーして別ソースにし、
LogEvent()をコールしてる行をコメントアウトするか、
LogEvent及びLogEventExを何もしない関数にしちゃって
stdafx.hで atlbase.hをインクルードしてる行を自前の
my_atlbase.h とかに変更しちゃう・・・かな?


C++初心者  2006-02-16 01:47:01  No: 60720

早速アドバイス通り試したら、
出なくなりました。ありがとうございます。
ですが、力技過ぎる感じがします。
他に良い方法はないのでしょうかねぇ?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加