从EventLog.CreateEventSource收到“...已经注册...”,即使我正在检查!EventLog.SourceExists我的以下代码失败并显示“...已在本地计算机上注册为源”,即使我先进行了检查:stringeventSrc=Constants.EventSrcPL;如果(!EventLog.Exists(eventLog)){如果(!EventLog.SourceExists(eventSrc)){尝试{EventLog.CreateEventSource(eventSrc,eventLog);}catch(Exceptione){System.Diagnostics.Debug.WriteLine(e.Message);我认为调用!EventLog.SourceExists足以防止我犯错!我正在使用2010.NET4和Windows764编译到任何CPU。编辑:更新代码以获取局部常量以检查它们是否未更改,并使用锁定来确保只有一个线程可以测试和创建。该代码仍然失败并出现相同的错误。FoundthisissueafterdiggingintoSysinternals'ProcessMonitor:CallingEventLog.Exists("MyLog");Couldnotfindlogname,asexpected:KLMSystemCurrentControlSetServiceEventLogMyLogCallingEventLog.SourceExists("MySource");Checkedseveralplacesandcouldn'tfindtheexpectedname:HKLMSystemCurrentControlSetServicesEventLogApplicationMYSOURCEHKLMSystemCurrentControlSetServiceEventLogHardwareEventsMYSOURCEHKLMSystemCurrentControlSetserviceseventlogInternetExplorerMySourceHKLMSystemCurrentControlSetserviceseventlogKeyManagementServiceMySetSourceSystemCurrentControlHKLMserviceseventlogMediaCenterMySourceHKLM系统CurrentControlSet服务事件日志ODIAGMYSOURCEHKLM系统CurrentControlSet服务事件日志OSessionMYSOURCEHKLM系统CurrentControlSet服务事件日志安全MYSOURCEHKLM系统CurrentControlSet服务事件日志SYSTEMMYSOURCEHKLM系统CurrentControlSet服务事件日志VisualSVNServerMYSOURCEHKLMSystemCurrentControlSetserviceseventlogWindowsPowerShellMySourceHKLMSystemCurrentControlSetServiceEventLogApplicationMYSOURCEHKLMSystemCurrentControlSet服务事件日志HardwareEventsMYSOURCEHKLMSystemCurrentControlSetserviceseventlogInternetExplorerMySourceHKLMSystemCurrentControlSetserviceseventlogKeyManagementServiceMySourceHKLMSystemCurrentControlSetserviceseventlogMediaCenterMySourceHKLM系统CurrentControlSet服务事件日志ODIAGMYSOURCEHKLM系统CurrentControlSet服务事件日志OSessionMYSOURCEHKLM系统CurrentControlSet服务事件日志安全MYSOURCEHKLM系统CurrentControlSet服务事件日志SYSTEMMYSOURCEHKLM系统CurrentControlSet服务事件日志VisualSVNServerMYSOURCEHKLM系统CurrentControlSet服务事件日志在以下注册表位置和错误中查找MyLog:HKLMSystemCurrentControlSetserviceseventlogApplicationMyLog删除“HKLMSystemCurrentControlSetserviceseventlogApplicationMyLog”并重新运行解决了我的问题!看起来.Exists并没有检查.CreateEvent做的所有地方!//0为假,1为真。私人的staticintusingResource=0;if(!EventLog.SourceExists(Constants.EventSrcPL)){//0表示该方法没有被使用。if(0==Interlocked.Exchange(refusingResource,1)){if(!EventLog.SourceExists(Constants.EventSrcPL)){try{EventLog.CreateEventSource(Constants.EventSrcPL,Constants.EventLogPL);}catch(Exceptione){System.Diagnostics.Debug.WriteLine(e.Message);//释放锁Interlocked.Exchange(refusingResource,0);}}}}else{usingResource=0;}在您访问事件日志的确切时间由另一个应用程序创建源时,无法解决问题编辑:已修改以说明EventSource的延迟创建。C#学习教程就是这些:从EventLog.CreateEventSource接收“...已经注册...”,即使我正在检查!EventLog.SourceExists分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
