2010-04-03 123 views
3

我写信,从我的Windows事件日志窗体应用程序在Windows 7上运行,我在事件得到这个消息日志Windows窗体事件日志

从源应用程序事件ID X的说明无法找到。引发此事件的组件未安装在本地计算机上或安装已损坏。您可以在本地计算机上安装或修复组件。

如果事件发生在另一台计算机上,显示信息必须与该事件一起保存。

以下信息包括与事件:

异常详细信息

消息资源是存在的,但该消息没有在字符串/消息表

我的记录发现代码是:

public void Log(Exception exc) 
{ 
    EventLog.WriteEntry(
     "Application", 
     exc.ToString(), 
     EventLogEntryType.Error, 
     100); 
} 

我在Windows窗体上的日志记录通常是给一个数据库,但在这种情况下决定使用事件日志。我通常在ASP.NET应用程序中使用事件日志,但这些都在本地XP Pro上,而Windows Server 2003则在网络上使用。

这是Windows 7的东西还是Windows窗体的东西,我应该怎么做才能解决这个问题?谢谢。

+0

什么是堆栈跟踪和/或消息的来源? – 2010-04-03 01:16:25

+0

这是事件日志中的消息 – blu 2010-04-03 01:17:28

回答

2

请参阅http://support.microsoft.com/kb/307024,具体来说,不要忘记创建您的事件源。

+2

另外,请注意创建事件源的进程有足够的权限来执行此操作。 – 2010-04-03 01:28:56

+0

+1关于创建事件源的评论。这是缺少的地方。 – 2010-04-03 01:29:17

+0

是的,不知道我是如何错过的。现在与UAC进行史诗般的斗争。 – blu 2010-04-03 01:54:12

0

此重载中的第一个参数是“应用程序在指定计算机上注册的源。” documented here 如果这个来源是,就像你的情况,“应用程序”,你会得到这种行为。 (难道说你mistakingly认为第一个参数是指Windows的日志:应用程序,安全等)

要注册您的源做到这一点:

public void Log(Exception exc){ 
    if(!EventLog.SourceExists("MySource")) 
    { 
     EventLog.CreateEventSource("MySource", "MyNewLog"); 
     return ; 
    } 
    EventLog.WriteEntry(
    "MySource", 
    exc.ToString(), 
    EventLogEntryType.Error, 
    100); } 
0

此溶液为我工作:

在Windows 7或Win 2008 R2的注册表中,此项下有一个关键HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ CustomEventLog,它们都是该事件日志的已注册有效源。

当您尝试使用无效的源(不是HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ CustomEventLog下的项)写入事件日志时,它列举其他事件日志键以查看如果有源存在。

我在HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ CustomEventLog项下添加了所有缺少的源代码。 只需在此项下创建现有密钥的副本,并将其重命名为您的EventSource。