.net - 事件日志消息文件问题

标签 .net message event-log

我工作的应用程序之一一直在吐出丑陋的事件日志消息,其中包含我们的消息,但也有精彩的消息,如下所示:

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

所以我开始为这个源创建一个事件日志消息文件,听起来很简单吧?
;// 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
.

然后我像往常一样编译这个文件:
"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

我现在有了编译好的 MyAppMessages.dll。我现在添加所需的注册表项:
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>

问题是,我仍然收到与开始时相同的消息,只有任务类别现在从消息文件加载正确的值,而不是之前加载的默认值 (1)。

这是事件数据的 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>

我不是消息文件专家,但它在消息文件中找到类别定义,而不是事件消息。有没有人知道为什么找不到消息但在同一个 DLL 中找到类别?

最佳答案

事实证明,MSDN 论坛上的某个人不小心偶然发现了这个问题的解决方案并与我分享。

只需用 Severity=xxxxx 去掉任何行和 Facility=xxxxx在消息文件中,重新编译后将显示自定义消息。 Facility不在我的文件中,但另一个人在他的文件里有那条线,如果不把那条线也去掉,它就对他不起作用。不知道为什么这些行出现在很多教程和官方 MSDN 文档示例中,但确实存在。

希望这对某人有所帮助!

关于.net - 事件日志消息文件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469188/

相关文章:

c# - 您将功能文档放在哪里以便它显示在智能感知上?

c# - 无法确定 System.Char 类型的 JSON 对象类型

version-control - 在版本控制系统中编写更改消息的指南?

java - JSF 验证消息

delphi - RegisterEventSource 返回 997 I/O PENDING

c# - 无法打开源 'blah' 的日志。您可能没有写入权限。嗯?

c# - 如果我的类定义了一个字段,该字段的类型在其中实现了处置模式,我是否应该始终实现处置模式? C#

c# - 为什么 2 个委托(delegate)实例返回相同的哈希码?

spring - 我如何从spring boot应用程序向手机发送短信

c# - 如何使用 WriteEvent 将事件记录为 Critical