我已经为事件记录器创建了一个类别文件,但是类别名称没有显示在事件记录器中。
但是,如果我从 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
最佳答案
尝试将计算机的 Authenticated Users
或 Users
组添加到邮件文件夹的安全级别。保留默认权限。然后重新启动或尝试重新启动 EventLog 服务。
在管理员命令提示符下:net stop eventlog
系统可能会提示您关闭其他服务。您必须输入 Y
才能继续。被关闭的服务通常会自行重启,因此您只需等待几秒钟。事件日志服务可能无法关闭,因为另一个服务已重新启动,可能需要多次尝试才能关闭所有内容。仔细观察结果文本的状态。
我在将源注册表信息指向我的 VS 项目中的消息文件夹时遇到了同样的问题。我发现它在我用管理员用户创建一个 C:\Test
文件夹并引用它之后开始工作。这和项目文件夹之间的唯一区别是两组。添加两组中的任何一个都可以使事情奏效。将它们都从任一文件夹中取出使其停止。
我还发现,如果我在 CategoryMessageFile
和 EventMessageFile
中匹配 MessageId,它会忽略 CategoryMessageFile
。
关于c++ - Windows 事件日志中没有类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029025/