EventCreate.exe 创建一个“CustomSource”值,这是什么意思?

问题描述 投票:0回答:2

命令行

EventCreate.exe
工具在注册表中注册一个用户定义的事件源,供Windows事件日志查看器使用,像这样:

eventcreate /t INFORMATION /ID 100 /L "Application" /SO [SourceName] /D "Description"

我写了一个应用程序,它有自己的事件日志资源字符串,并注册为事件源,per MSDN,但它不使用

CustomSource
值并且工作正常。

我无法在 MSDN 或在线其他地方找到任何关于

CustomSource
的确切含义的文档。我机器上的所有注册资源都没有使用它。

有谁知道

CustomSource
是什么意思,它是如何工作的?它只是
EventCreate.exe
内部的东西,还是 Windows 事件日志实际上将它用于某些事情?

winapi event-log eventlog-source custom-eventlog
2个回答
5
投票

感谢@RbMm 指出这篇博文:

EventCreate 和“错误:源参数仅用于识别自定义应用程序/脚本”

无论出于何种原因,EventCreate 仅设计用于记录与 EventCreate 创建的事件日志源相关联的事件。它通过在创建新源时在源的注册表项中添加一个名为

CustomSource
的 REG_DWORD 值并检查该值是否存在已存在的源来实现。所以在上面的例子中,如果应用程序日志中不存在“MyStuff”源,上面的命令会创建它并使用
CustomSource
值配置它的键。在验证
CustomSource
值的存在后,使用相同源对 EventCreate 的后续调用将成功。但是,如果“MyStuff”源是通过另一种没有创建 CustomSource 标志的机制创建的,例如使用 PowerShell
New-EventLog
cmdlet,那么您会收到错误消息。如果您在事件源的键中创建
CustomSource
值,则 EventCreate 将与该源一起使用。


0
投票

1 - 尝试使用代码创建源

代码应检查源代码,如果不存在则创建它。

示例代码(带 .NET 的 powershell):

$source = "MySource"

if (![System.Diagnostics.EventLog]::SourceExists($source)) {
    [System.Diagnostics.EventLog]::CreateEventSource($source, 'Application')
}

[System.Diagnostics.EventLog]::WriteEntry($source, 'log message test', [System.Diagnostics.EventLogEntryType]::Information)

2 - 重启 PC/服务器

不太可能有帮助,但一个简单的选择。

3 - EventCreate CMD 工具

尝试使用命令行工具“eventcreate”来编写条目,它可能会让您更详细地了解问题:

eventcreate /T Information /ID 20 /L Application /SO PEI /D “Raymondcc Event for My Program” 错误:

eventcreate:错误:源参数仅用于识别自定义应用程序/脚本(未安装的应用程序)。 这意味着您不能添加到不是由 eventcreate 创建的源。这意味着源是在安装等过程中由应用程序创建的,你不应该尝试让它工作,而是选择一个新的源名称(或者根本没有)

4 - 验证注册表

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application

它说替换为您尝试使用的来源。如果您看到 EventMessageFile 设置为 C:\Windows\Microsoft.NET\Framework64 4.0.30319\EventLogMessages.dll 之类的内容,则没有问题。如果您看到类似 c:\program files\my program.exe 的应用程序路径,那么它将无法运行。

5 - 其他选项

有办法解决这个问题,但它很复杂。基本上,如果可能的话,最好只使用另一个源名称。如果密钥不是必需的,您可以复制它(例如复制 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application),然后删除它并查看从那时起使用 eventcreate 是否有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.