C# 事件创建不起作用
我将源“Source401”用于日志“Log401”。我需要为“Log402”日志使用此源,并删除日志“Log401”。(如果我们可以将“Log401”重命名为“Log402”,也可以。但所有这些都需要以编程方式完成) 使用下面的代码,我得到以下异常。实现这一目标的最佳方式是什么 本地计算机上已存在源401 注意:当我删除旧日志时,它工作正常。但这些事件并没有被创造出来 更新C# 事件创建不起作用,c#,.net,C#,.net,我将源“Source401”用于日志“Log401”。我需要为“Log402”日志使用此源,并删除日志“Log401”。(如果我们可以将“Log401”重命名为“Log402”,也可以。但所有这些都需要以编程方式完成) 使用下面的代码,我得到以下异常。实现这一目标的最佳方式是什么 本地计算机上已存在源401 注意:当我删除旧日志时,它工作正常。但这些事件并没有被创造出来 更新 string source = "Source401"; string logName =
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;
}
从
操作系统将事件日志存储为文件。使用EventLogInstaller或CreateEventSource创建新事件日志时,关联文件存储在指定计算机上的%SystemRoot%\System32\Config目录中。文件名是通过在日志属性的前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;
}
例外是告诉你问题的确切原因。名为“Source401”的事件源已存在。您正在删除旧的事件日志“Log401”,但没有删除事件源 正如上面所说: 操作系统将事件日志存储为文件。使用EventLogInstaller或CreateEventSource创建新事件日志时,关联文件存储在指定计算机上的%SystemRoot%\System32\Config目录中。文件名是通过在日志属性的前8个字符后面附加“.evt”文件扩展名来设置的 源在本地计算机上必须是唯一的;新源名称不能与现有源名称或现有事件日志名称匹配。每个源一次只能写入一个事件日志 还有,这个小金块: 如果源已映射到日志,而您将其重新映射到新日志,则必须重新启动计算机才能使更改生效
此外,您可能还想从文档中考虑这一点:
在应用程序安装期间创建新的事件源。这允许操作系统有时间刷新其已注册事件源列表及其配置。如果操作系统尚未刷新其事件源列表,并且您尝试使用新源写入事件,则写入操作将失败 最后,您正在调用的CreateEventSource
方法被标记为已过时,并且从.NET 2.0开始就已过时。通常有很好的理由将方法标记为过时。你应该打电话来
我认为您需要重新考虑使用事件日志的方式。应用程序不应该以这种方式创建和删除日志。这不是它们的用途。我认为人们仍然可以理解你的问题。您应该使用更多神秘的名称,然后
S401
&L401
,那么您的问题是什么?@JimMischel为什么在我取消注释注释注释注释代码时不使用日志“Log402”创建事件?虽然在这种情况下没有错误,但不会将事件添加到日志中。感谢您提供完整的答案