在this answer之后,我做了一个非常简单的控制台应用程序,它向事件查看器写了一些东西:
class Program
{
static void Main(string[] args)
{
for(int i=0;i<10000;i++)
{
Console.Write(".");
}
Console.WriteLine("Preparing to write into Event log");
using (EventLog eventLog = new EventLog("Application"))
{
eventLog.Source = "Application";
eventLog.WriteEntry("Log message example", EventLogEntryType.Information, 101, 1);
}
Console.WriteLine("I wrote to the event log. Press a key");
Console.ReadLine();
}
}
然后检查事件查看器,我确实有一个显示“日志消息示例”的事件!是的!
但是,作为消息的一部分,我也得到了:(由Google翻译的文本)
找不到来自源“应用程序”的事件ID 101的说明。导致此事件的组件未安装在本地计算机上,或者安装已损坏。在本地计算机上安装组件或修复组件。
如果事件源自另一台计算机,则需要将显示信息与事件一起保存。
该事件包含以下信息:
日志消息示例
存在消息资源,但在消息表中找不到消息。
此消息是什么意思?
我的目标只是向事件查看器写一些消息以供以后调试(显然,上面的代码只是一个模拟示例,而不是我最终使用它的方式)
答案 0 :(得分:1)
听起来像是您不熟悉事件记录。因此,让我解释一下它是如何工作的。要写入事件日志,您需要一个Event Source。没有它,您将无法写入事件日志。在此示例中,您已将源提到为“应用程序”,并且没有针对您设计的控制台应用程序创建自定义事件源。因此Windows将使用应用程序日志。
谈到您的问题,每个事件源都应附加一个eventMessageFile,以解释该事件的含义。就您而言,您没有附加eventMessageFile。因此,您会收到此错误。可以安全地忽略此消息以进行模拟测试,并在创建应用程序时添加eventMessageFile。
应用程序可以使用应用程序日志,而无需向注册表添加新的事件源。但是,因为没有消息文件,所以事件查看器无法将任何事件标识符或事件类别映射到描述字符串,并且将显示错误。因此,您应该为应用程序的注册表添加唯一的事件源,并指定消息文件。