【发布时间】:2015-05-15 17:53:55
【问题描述】:
我已经为事件记录器创建了一个类别文件,但类别名称没有显示在事件记录器中。
如果我从 C:\Windows\System32\winevt\Logs 打开日志,则会显示类别名称。如果我使用以下 PowerShell,也会显示类别名称。
$eventlog = New-Object System.Diagnostics.EventLog("MyLog")
Write-Host $eventlog.Entries[0].Category
.mc 文件如下所示:
MessageIdTypedef = WORD
LanguageNames=(
English=0x0409:MSG00409
Swedish=0x041D:MSG0041D
)
MessageId=1
SymbolicName=CAT_1
Language=English
Category 1
.
Language=Swedish
Kategori 1
.
MessageId=2
SymbolicName=CAT_2
Language=English
Category 2
.
Language=Swedish
Kattegori 2
.
; // Up to 22 categorys
在注册表中,我有以下内容:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\MyLog\MySource]
"CategoryCount"=dword:00000016
"TypesSupported"=dword:00000007
"CategoryMessageFile"="C:\\path\\Messages.dll"
我发现https://social.msdn.microsoft.com/forums/windowsdesktop/en-us/3fed3069-ce0f-4168-8132-4d19d66fdd7e/windows-7eventlog-creating-custom-categories有同样的问题,但没有解决问题。
我已在 Windows 7、8 和 Windows Server 2008 R2 中尝试过此操作
编辑
我创建了一个测试项目来展示我所做的事情。下载它here
【问题讨论】:
-
请不要混淆“C:\\path\\Messages.dll”,显示实际路径。
-
现在 Messages.dll 位于解决方案的调试文件夹中。但我也尝试将其移至 C:\Messages.dll。和文件在文件系统中所在的函数有关系吗?
-
我创建了一个测试项目。在我的问题中最后查看我的编辑。
-
@magol 有关信息,将 DLL 移动到“Program Files (x86)”的子文件夹中(如下 Rich 所建议的)解决了我的问题。
-
这可能是因为非英语系统上的 Wevtsvc.dll 中的错误吗?曾经有一个修补程序 2772695 - 我不确定它是否已更新 - 我仍然在德语 Windows 7 操作系统上看到此问题(与英语 Windows 7 操作系统相反),并且 Wevtsvc.dll 较旧比修补程序信息中提到的那个。
标签: c++ windows logging event-log