将条目写入Windows应用程序日志c#

将条目写入Windows应用程序日志c#,c#,console-application,C#,Console Application,我有一个控制台应用程序,我需要在其中将各种条目写入Windows应用程序日志。正如人们所期望的那样,我能够通过以下几点实现这一点: EventLog eventLog = new EventLog(); eventLog.Source = "Application"; eventLog.WriteEntry("Sample application log entry", EventLogEntryType.Information, 1001, 0

我有一个控制台应用程序,我需要在其中将各种条目写入Windows应用程序日志。正如人们所期望的那样,我能够通过以下几点实现这一点:

        EventLog eventLog = new EventLog();
        eventLog.Source = "Application";

        eventLog.WriteEntry("Sample application log entry", EventLogEntryType.Information, 1001, 0);
然而,最终结果是:


找不到源应用程序中事件ID xxxx的说明。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复该组件

如果事件起源于另一台计算机,则显示信息必须与事件一起保存

本次活动包括以下信息: 示例应用程序日志条目

消息资源存在,但在字符串/消息表中找不到该消息



显然,更专业的外观在这里是合适的,那么如何编写一个只包含我想要写入日志的文本的条目呢?

这不是事件日志的工作方式。它不是一个日志文件。您可以使用数据发布事件。查看器加载该数据,查找适当的消息文本并格式化它们。如果消息丢失,则查看器无法创建格式并显示此错误消息。发布全文消息违背了近实时事件日志系统的目的,所以你是说WriteEvent比WriteEntry更好?不,我是说事件日志不是这样工作的。如果没有消息DLL,您将得到该错误消息。如果直接使用EVENTROL,则需要使用只能使用C++工具创建的DLL。您应该直接使用或通过。这允许您在单个类中定义事件和消息,但只发出EventID和数据。运行时负责从事件属性I see生成并注册适当的消息,并将为ETW EventSource提供快照。感谢您发出的消息,Windows接收的只是事件ID和数据。ETW然后检索并格式化已注册的消息