-3

我有用于日志“Log401”的源“Source401”。我需要将此源用于“Log402”日志并删除日志“Log401”。(如果我们可以将“Log401”重命名为“Log402”也可以。但这一切都需要以编程方式完成)

使用下面的代码,我得到以下异常。实现它的最佳方法是什么?

源 Source401 已存在于本地计算机上。

注意:当我删除旧日志时,它工作正常。但是事件没有被创建。

更新

来自MSDN

操作系统将事件日志存储为文件。当您使用 EventLogInstaller 或 CreateEventSource 创建新的事件日志时,相关文件存储在指定计算机上的 %SystemRoot%\System32\Config 目录中。文件名是通过在 Log 属性的前 8 个字符后附加“.evt”文件扩展名来设置的。

源在本地计算机上必须是唯一的;新的源名称不能与现有的源名称或现有的事件日志名称匹配。每个源一次只能写入一个事件日志;但是,您的应用程序可以使用多个源来写入多个事件日志。

代码

  string source = "Source401";
  string logName = "Log402";
  string oldLogName = "Log401";
  string eventName = "Sample Event";
  string machineName = ".";


            if (!EventLog.Exists(logName, machineName))
            {
                ////Delete old log
                //if (EventLog.Exists(oldLogName, machineName))
                //{
                //    EventLog.Delete(oldLogName, machineName);
                //}

                

                //Create Source for the Log
                EventLog.CreateEventSource(source, logName, machineName);
                
                //Create Event
                EventLog eventLog = new EventLog(logName, machineName, source);
                eventLog.WriteEntry(eventName);
                try
                {
                    eventLog.WriteEntry(eventName, EventLogEntryType.Warning, 234, (short)3);
                }
                catch (Exception exception)
                {
                    int x = 0;
                }
4

1 回答 1

2

例外是准确地告诉您问题所在。名为“Source401”的事件源已存在。您要删除旧的事件日志“Log401”,但不会删除事件源。

正如文档所说:

操作系统将事件日志存储为文件。当您使用 EventLogInstaller 或 CreateEventSource 创建新的事件日志时,相关文件存储在指定计算机上的 %SystemRoot%\System32\Config 目录中。文件名是通过在 Log 属性的前 8 个字符后附加“.evt”文件扩展名来设置的。

源在本地计算机上必须是唯一的;新的源名称不能与现有的源名称或现有的事件日志名称匹配。每个源一次只能写入一个事件日志;

另外,这个小金块:

如果源已映射到日志并且您将其重新映射到新日志,则必须重新启动计算机才能使更改生效。

此外,您可能还想从文档中考虑这一点:

在安装应用程序期间创建新的事件源。这允许操作系统有时间刷新其已注册事件源及其配置的列表。如果操作系统没有刷新其事件源列表,而您尝试使用新源写入事件,则写入操作将失败

最后,CreateEventSource您调用的方法被标记为已过时,并且自 .NET 2.0 以来一直存在。将方法标记为过时通常是有充分理由的。您应该调用CreateEventSource(EventSourceCreationData)

我认为您需要重新考虑使用事件日志的方式。您的应用程序不应该以这种方式创建和删除日志。这不是它们的用途。

于 2013-04-19T23:04:43.040 回答