One of the applications I'm working on spits out the ugly event log messages that have our message, but also a wonderful message, for example below:
The description for Event ID 103 from source MyCustomSource cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer. If the event originated on another computer, the display information had to be saved with the event. The following information was included with the event: My event log message that is redacted. the message resource is present but the message is not found in the string/message table
So, I went the way of creating an event log message file for this source, does it sound pretty simple?
;// Header MessageIdTypedef=DWORD LanguageNames=( English=0x409:MSG00409 ) ;// Categories MessageId=0x1 SymbolicName=MYAPP_CATEGORY_GENERAL Language=English MyApp General . ;// Messages MessageId=0x103 SymbolicName=API_ERROR Severity=Error Language=English An error occurred in the API. Message: %1 .
Then I compile this file as usual:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mc.exe" -u MyAppMessages.mc" "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\rc.exe" -r MyAppMessages.rc" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe" -dll -noentry -out:MyAppMessages.dll MyAppMessages.res /MACHINE:x86
Now I have a compiled file MyAppMessages.dll. Now I add the necessary registry entries:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\MyApp\MyApp CategoryCount REG_DWORD 1 CategoryMessageFile REG_EXPAND_SZ <path to MyAppMessages.dll> EventMessageFile REG_EXPAND_SZ <path to MyAppMessages.dll>
The problem is that I still get the same message as at the beginning, only the task category now loads the correct value from the message file instead of the default value (1) that was downloaded earlier.
This is the event data XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="MyApp" /> <EventID Qualifiers="57344">103</EventID> <Level>2</Level> <Task>1</Task> <Keywords>0x80000000000000</Keywords> <TimeCreated SystemTime="2012-02-27T16:42:20.000000000Z" /> <EventRecordID>20759</EventRecordID> <Channel>MyApp</Channel> <Computer>Skycaller</Computer> <Security /> </System> <EventData> <Data>My event log message that is redacted.</Data> </EventData> </Event>
I am not an expert in a message file, but it finds a category definition in a message file, but not an event message. Does anyone know why a message cannot be found, but a category is found in the same DLL?