JLW*_*low 9 .net c# .net-4.0 event-log
我的以下代码失败,"...已经在本地计算机上注册为源",即使我先做检查:
lock ( eventLock )
{
string eventLog = Constants.EventLogPL;
string eventSrc = Constants.EventSrcPL;
if (!EventLog.Exists(eventLog))
{
if (!EventLog.SourceExists(eventSrc))
{
try
{
EventLog.CreateEventSource(eventSrc, eventLog);
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我以为我的电话!EventLog.SourceExists会足以防止我的错误!我正在使用2010 .NET 4和Windows 7 64编译到任何CPU.
编辑:更新代码以获取本地常量以检查它们是否未更改,并使用锁定以确保只有一个线程可以测试和创建.代码仍然失败并出现相同的错误.
JLW*_*low 23
在深入了解Sysinternals的Process Monitor后发现了这个问题:
调用 EventLog.Exists("MyLog");
找不到日志名称,如预期的那样:
KLM \系统\ CurrentControlSet \服务\事件日志\ MyLog
调用 EventLog.SourceExists("MySource");
检查几个地方,名称未按预期找到:
HKLM\System\CurrentControlSet\services\eventlog\Application\MySource
HKLM\System\CurrentControlSet\services\eventlog\HardwareEvents\MySource
HKLM\System\CurrentControlSet\services\eventlog\Internet Explorer\MySource
HKLM\System\CurrentControlSet\services\eventlog \密钥管理服务\ MySource
HKLM\System\CurrentControlSet\services\eventlog\Media Center\MySource
HKLM\System\CurrentControlSet\services\eventlog\ODiag\MySource
HKLM\System\CurrentControlSet\services\eventlog\OSession\MySource
HKLM\System\CurrentControlSet\services\eventlog\Security\MySource
HKLM\System\CurrentControlSet\services\eventlog\System\MySource
HKLM\System\CurrentControlSet\services\eventlog\VisualSVNServer\MySource
HKLM\System\CurrentControlSet\services\eventlog\Windows PowerShell\MySource
HKLM\System\CurrentControlSet\services\eventlog\Application\MySource
HKLM\System\CurrentControlSet\services\eventlog\HardwareEvents\MySource
HKLM\System\CurrentControlSet\services\eventlog\Internet Explorer\MySource
HKLM\System\CurrentControlSet\services\eventlog\Key Management Service\MySource
HKLM\System\CurrentControlSet\services\eventlog\Media Center\MySource
HKLM\System\CurrentControlSet\services\eventlog\ODiag\MySource
HKLM\System\CurrentControlSet\services\eventlog\OSession\MySource
HKLM\System\CurrentControlSet\services\eventlog\Security\MySource
HKLM\System\CurrentControlSet\services\eventlog\System\MySource
HKLM\System\CurrentControlSet\services\eventlog\VisualSVNServer\MySource
HKLM\System\CurrentControlSet\services\eventlog\Windows PowerShell\MySource
HKLM\System\CurrentControlSet\services\eventlog\MyLog
然而,打电话 EventLog.CreateEventSource("MySource", "MyLog");
在以下注册表位置和错误中查找MyLog:
HKLM \系统\ CurrentControlSet \服务\事件日志\应用程序\ MyLog
删除"HKLM\System\CurrentControlSet\services\eventlog\Application\MyLog"并重新运行修复了我的问题!
看起来好像.Exists不看所有的地方.CreateEvent呢!