繁体   English   中英

Windows窗体事件日志

[英]Windows Forms Event Log

我从Windows 7上运行的Windows窗体应用程序写入事件日志,并在事件日志中收到此消息:

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

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

活动中包含以下信息:

例外细节

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

我的日志代码是:

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

我在Windows窗体上的日志记录通常是数据库,但在这种情况下决定使用事件日志。 我通常在ASP.NET应用程序中使用事件日志,但这些是在本地XP Pro和Web服务器上的Windows Server 2003上。

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

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

这个解决方案对我有用:

在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。

此重载中的第一个参数是“应用程序在指定计算机上注册的源”。 此处记录如果此源是“应用程序”,则会出现此行为。 (可能是你错误地认为第一个参数是指Windows日志:应用程序,安全性等?)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM