エラーのトラブルシューティング: イベント メッセージが見つかりません

この記事は、イベント ビューアー: イベント メッセージが見つからないというエラーのトラブルシューティングに役立ちます。

元の製品バージョン: Windows
元の KB 番号: 166902

現象

イベント ビューアーのイベントに対して次のエラー メッセージが表示される場合があります。

ソース (<アプリケーション名>) のイベント ID ( <####> ) の説明が見つかりませんでした。 これには、ReportEvent によってログに記録されたメッセージのテキストである、次の挿入文字列 <が含まれています>。

考えられる原因と、問題を解決する方法の詳細を次に示します。 原因は、次の 1 つ以上である可能性があります。

正しくないソース名パラメーターが RegisterEventSource に渡される

レジストリのソース名が に渡されたもの RegisterEventSourceと一致していることを確認します。 この関数は、ソースがレジストリに見つからない場合でも成功します。 レジストリのソース名は、 のサブキー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLogに含める必要があります。

通常、アプリケーション ソースはアプリケーション サブキーの下に一覧表示されます。

レジストリ内の .dll または .exe ファイルへのパスが正しくありません

で見つかったという名前 EventMessageFile のレジストリ値で HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\sourcename、.dll または .exe ファイルへのパスが正しく、.dll または .exe ファイルの名前が正しいことを確認します。 この場合、イベント ビューアー アプリケーションはメッセージ リソースのソースの読み込みに失敗します。 また、または他のマクロを使用 %SystemRoot% する場合は、REG_EXPAND_SZレジストリ値の型を使用する必要があります。 それ以外の場合、マクロは展開されません。

登録されたメッセージ ソースが間違った .dll または .exe ファイルです

で見つかったという名前 EventMessageFile のレジストリ値で HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\sourcename、.dll または .exe ファイルへのパスが、想定されるメッセージ リソースを含むパスであることを確認します。 パスを指定せずに を EventMessageFile 一覧表示し、同じ名前の複数のファイルを持つことに注意してください。 イベント ビューアーは、LoadLibrary API のコメントに記載されている検索アルゴリズムを使用して、メッセージ ソースを検索する規則に従います。

メッセージ リソースが EventMessageFile ソースにバインドされていない

ログ サンプルのバージョンでは、ビルドの一部として .rc ファイルをメイクファイルに含めませんでした。 その結果、DLL はビルドされますが、メッセージ リソースはビルドに含まれません。 一部の開発者は、メッセージ コンパイラから出力される.bin ファイルをリソースとして含めようとしています。 リソースを DLL に適切にバインドしません。 メッセージ コンパイラから出力される .rc ファイルを使用する必要があります。これは、ID が 1 で型 11 (RT_MESSAGETABLE) のリソースをマークするためです。 メッセージ リソースを見つけるには、イベント ビューアーが必要です。

Visual C++ を使用して DLL をビルド EventMessageFile する場合は、メッセージ コンパイラから出力される .rc ファイルを Visual C++ プロジェクトのソース ファイルとして追加する必要があります。 .rc ファイルをコンパイルし、リソースを DLL にリンクするように Visual C++ に指示します。

正しい ID が ReportEvent 関数に渡されていることを確認します

多くの人は、ファイル内で .mc 見つかったリテラル ID 番号が正しい ID であると考えます。 メッセージ コンパイラは ID 番号を ビットごとの OR に LOWORD 、ビットごとの OR は重大度ビットとファシリティ ビットを に HIWORDビット化するため、そうではありません。 アプリケーションでは、メッセージ コンパイラから出力されるヘッダー ファイルで常にシンボリック名を使用する必要があります。

ファイル内の MessageIdTypedef= ステートメントを確認します .mc 。 一部のファイル例では .mc 、カテゴリ ID の MessageIDTypedefWORD を定義する方法が示されています。 ただし、イベント ID は を HIWORD失います。 この問題を解決するには、1 回だけ定義 MessageIdTypedef= し、 に設定します DWORD

また、メッセージ リソースとヘッダー ファイルに MC -c コマンド ラインが一貫して使用されていることを確認してください。 スイッチは -c 、メッセージ ID の の HIWORD ビットをオンにします。

EventMessageFile エントリを追加したので、イベント ビューアーは再起動されません

イベント ビューアーは、イベント ソースに対して読み込まれる DLL をキャッシュします。 イベント ビューアーの起動後に適切なディレクトリまたはソース名を指定するようにレジストリを変更した場合は、イベント ビューアーを再起動する必要があります。