c++ - Windows 事件日志中没有类别

标签 c++ windows logging event-log

我已经为事件记录器创建了一个类别文件,但是类别名称没有显示在事件记录器中。

但是,如果我从 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 UsersUsers 组添加到邮件文件夹的安全级别。保留默认权限。然后重新启动或尝试重新启动 EventLog 服务。

在管理员命令提示符下:net stop eventlog

系统可能会提示您关闭其他服务。您必须输入 Y 才能继续。被关闭的服务通常会自行重启,因此您只需等待几秒钟。事件日志服务可能无法关闭,因为另一个服务已重新启动,可能需要多次尝试才能关闭所有内容。仔细观察结果文本的状态。

我在将源注册表信息指向我的 VS 项目中的消息文件夹时遇到了同样的问题。我发现它在我用管理员用户创建一个 C:\Test 文件夹并引用它之后开始工作。这和项目文件夹之间的唯一区别是两组。添加两组中的任何一个都可以使事情奏效。将它们都从任一文件夹中取出使其停止。

我还发现,如果我在 CategoryMessageFileEventMessageFile 中匹配 MessageId,它会忽略 CategoryMessageFile

关于c++ - Windows 事件日志中没有类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029025/

相关文章:

java - 查看登录设备

java - 记录 .class 文件中的值,可能使用 AOP 进行拦截

java - Java 是否提供 'friend' 访问修饰符?

c++ - 位操作

二进制的 C++ Windows 进程 ID

c++ - 如何从 LPCTSTR 转换为 LPSTR?

c++ - 试图通过套接字接收文件

c++ - 我可以有模板实例化副作用吗?

html - 将 HTML 文档中的 HTML 实体转换为纯 UTF 字符的任何好工具?

Python 日志记录和日语(或任何非 ASCII)