【发布时间】:2017-11-08 13:38:36
【问题描述】:
我正在用 Delphi 为 Windows 编写一个服务应用程序。在某些事件中,我将消息写入 Windows 事件日志。这可行,但每个日志条目中都有以下文本:
无法找到来自源 yyyyy 的事件 ID xxx 的描述...
我不想要这个。
我做了什么:
-
使用此内容生成 ResouceEventlog.mc:
SeverityNames=(成功=0x0:STATUS_SEVERITY_SUCCESS 信息=0x1:STATUS_SEVERITY_INFORMATIONAL 警告=0x2:STATUS_SEVERITY_WARNING 错误=0x3:STATUS_SEVERITY_ERROR ) FacilityNames=(系统=0x0:FACILITY_SYSTEM 运行时=0x2:FACILITY_RUNTIME 存根=0x3:FACILITY_STUBS IO=0x4:FACILITY_IO_ERROR_CODE ) 语言名称=(德语=0x407:MSG00407) MessageIdTypedef=WORD 消息 ID=0x1 符号名称=CAT_ALL 语言=德语 全部 . 消息 ID=0x2 符号名=CAT_CALL 语言=德语 安鲁夫 . 消息 ID=0x3 符号名=CAT_LIC 语言=德语 利岑信息 . 消息 ID=0x4 符号名称=CAT_INFO 语言=德语 信息 . 消息 ID=0x5 符号名=CAT_ERR 语言=德语 费勒 . MessageIdTypedef=DWORD 消息 ID=0x1000 符号名=LIC_INFO 语言=德语 利岑信息 . 消息 ID=0x1001 符号名=LIC_EXP 语言=德语 利岑信息 . 消息 ID=0x2000 符号名称=CALL_SiG 语言=德语 信号传递 . 消息 ID=0x2001 符号名=CALL_DBL 语言=德语 Anruf bereits erfasst . 消息 ID=0x2002 符号名=CALL_CAPI 语言=德语 Anruf 一个 CAPI . 消息 ID=0x2003 符号名=CALL_PROCESS 语言=德语 Anruf verarbeiten . 消息 ID=0x3000 符号名=ERR_CAPI 语言=德语 卡皮费勒 . 消息 ID=0x3001 符号名=ERR_PATH 语言=德语 Speicherpfad kann nicht erstellt weren . 消息 ID=0x3002 符号名=ERR_NOCAPI 语言=德语 Keine CAPI gefunden . 消息 ID=0x3003 符号名=ERR_UDP 语言=德语 UDP_Empfangs_Port ist 0 . 用
mc.exe编译ResourceEventlog.mc将
RecourceEventLog.rc与brcc32.exe编译成ResourceEventlog.res将
{$R RecourceEventlog.res}添加到我的服务应用程序的主单元-
在
Windows 注册表编辑器版本 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Anrufmonitor] "EventMessageFile"="C:\\AM\\AMService.exe" "CategoryMessageFile"="C:\\AM\\AMService.exe" “类别计数”=dword:00000005 “支持的类型”=dword:00000007AfterInstall事件中,我创建了一些注册表项: -
在我的服务应用程序中,我定义了一些常量并使用
TService.LogEvent()将消息写入事件日志:const CAT_ALL :WORD =$1; CAT_CALL :WORD =$2; CAT_LIC :WORD =$3; CAT_INFO :WORD =$4; CAT_ERR :WORD =$5; LIC_INFO :DWORD =$00001000; LIC_EXP :DWORD =$00001001; CALL_SIG :DWORD =$00002000; CALL_DBL :DWORD =$00002001; CALL_CAPI :DWORD =$00002002; CALL_PROCESS :DWORD =$00002003; ERR_CAPI :DWORD =$00003000; ERR_PATH :DWORD =$00003001; ERR_NOCAPI :DWORD =$00003002; ERR_UDP :DWORD =$00003003; ... LogMessage('test an eventlog-entry', EVENTLOG_INFORMATION_TYPE, CAT_CALL, CALL_PROCESS);
事件日志条目创建成功,但仍然出现“找不到事件 ID”文本。
【问题讨论】:
-
在添加注册表项后您是否重新启动了事件查看器?
-
没有。我已经测试了你的想法,但我得到了相同的结果。
-
我希望事件日志使用 DWORD 从资源中获取 MessageID。我在 mc-file 中也定义为 DWORD 单位。但是随后eventlog在evententry中显示的总是整数。所以我不知道这是否正确,但我认为是的。
-
This 是关于第 5 点中的 ID。