gpt4 book ai didi

c# - 从 EventLog.CreateEventSource 接收 "...has already been registered..."即使我正在检查 !EventLog.SourceExists

转载 作者:太空狗 更新时间:2023-10-29 17:32:18 25 4
gpt4 key购买 nike

我的以下代码失败并显示“...已在本地计算机上注册为源”,即使我首先进行检查也是如此:

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);
}
}
}
}

我原以为调用 !EventLog.SourceExists 就足以避免我的错误!我在 2010 .NET 4 和 Windows 7 64 上编译到任何 CPU。

编辑:更新代码以获取 Constant 到本地以检查它们没有更改,并使用锁定来确保只有一个线程可以测试和创建。代码仍然失败并出现相同的错误。

最佳答案

深入Sysinternals' Process Monitor 后发现问题再多一点:

调用 EventLog.Exists("MyLog");

未找到日志名称,如预期的那样:

KLM\System\CurrentControlSet\services\eventlog\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\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\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\System\CurrentControlSet\services\eventlog\Application\MyLog

删除“HKLM\System\CurrentControlSet\services\eventlog\Application\MyLog”并重新运行解决了我的问题!

看起来 .Exists 并没有在 .CreateEvent 出现的所有地方都出现!

关于c# - 从 EventLog.CreateEventSource 接收 "...has already been registered..."即使我正在检查 !EventLog.SourceExists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com