【问题标题】:The source was not found, but some or all event logs could not be searched未找到源,但无法搜索部分或全部事件日志
【发布时间】:2012-03-22 19:02:30
【问题描述】:

我收到以下异常。我已经在注册表编辑的事件日志中完全控制了 Asp.net 帐户。

[SecurityException: 未找到源,但部分或全部事件 无法搜索日志。无法访问的日志:安全性。]

System.Diagnostics.EventLog.FindSourceRegistration(String source,  String machineName, Boolean readOnly, Boolean wantToCreate) +664
System.Diagnostics.EventLog.SourceExists(String source, String machineName, Boolean wantToCreate) +109
System.Diagnostics.EventLog.SourceExists(String source) +14 Microsoft.ApplicationBlocks.ExceptionManagement.DefaultPublisher.VerifyValidSource() +41

我猜这是因为服务器上的一些配置问题?

【问题讨论】:

标签: c# .net windows-7 event-log securityexception


【解决方案1】:

如果你只是想嗅探本地机器上是否存在Source,但没有能力获得授权,你可以通过以下示例(VB)来查找它。

这绕过了安全错误。您可以类似地修改此函数以返回 Source 的 LogName。

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function

【讨论】:

    【解决方案2】:

    我最近遇到了这个错误,但没有一个解决方案对我有用。为我解决错误的方法是将应用程序池用户添加到计算机管理中的 Power Users 组。由于公司政策,我无法使用管理员组。

    【讨论】:

      【解决方案3】:

      无法访问的日志:安全性

      新事件源需要在所有日志中具有唯一名称,包括安全性(读取时需要管理员权限)。

      所以您的应用需要管理员权限来创建源。但这可能是矫枉过正。

      我写了这个powershell脚本来随意创建事件源。将其保存为 *.ps1 并以 any 权限运行它,它会自行提升。

      # CHECK OR RUN AS ADMIN
      
      If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
      {   
          $arguments = "& '" + $myinvocation.mycommand.definition + "'"
          Start-Process powershell -Verb runAs -ArgumentList $arguments
          Break
      }
      
      # CHECK FOR EXISTENCE OR CREATE
      
      $source = "My Service Event Source";
      $logname = "Application";
      
      if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
          [System.Diagnostics.EventLog]::CreateEventSource($source, $logname);
          Write-Host $source -f white -nonewline; Write-Host " successfully added." -f green;
      }
      else
      {
          Write-Host $source -f white -nonewline; Write-Host " already exists.";
      }
      
      # DONE
      
      Write-Host -NoNewLine 'Press any key to continue...';
      $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');
      

      【讨论】:

        【解决方案4】:

        如果您在 IIS 上执行 SenseNet TaskManagement 网站的新安装(来自源代码,而不是 WebPI),您将收到此消息,通常与 SignalR 通信有关。作为@nicole-caliniou points out,,这是由于注册表中的键搜索失败所致。

        要为 SenseNet TaskManagement v1.1.0 解决这个问题,首先在 web.config 文件中找到注册表项名称。默认为“SnTaskWeb”。

         <appSettings>
           <add key="LogSourceName" value="SnTaskWeb" />
        

        打开注册表编辑器regedit.exe,然后导航到HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask。右键单击 SnTask 并选择New Key,并将键命名为SnTaskWeb 用于上面显示的配置。然后右键单击SnTaskWeb 元素并选择New Expandable String Value。名称应为EventMessageFile,值数据应为C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll

        关键字:signalr、sensenet、regedit、权限

        【讨论】:

          【解决方案5】:

          对我来说刚刚工作了 iisreset(以管理员身份运行 cmd -> iisreset)。也许有人可以试一试。

          【讨论】:

            【解决方案6】:

            对我没用。

            我创建了一个新的键和字符串值并设法让它工作

            Key= HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\<Your app name>\
            String EventMessageFile value=C:\Windows\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll
            

            【讨论】:

            • 我也是这样做的。我刚刚使用我在应用程序中使用的源名称创建了一个新密钥,并且它工作正常。
            【解决方案7】:

            对我来说,这个错误是由于命令提示符,它没有在管理员权限下运行。您需要右键单击命令提示符并说“以管理员身份运行”。

            您需要管理员角色才能安装或卸载服务。

            【讨论】:

            • 我摸索了大约 2 个小时,谢谢伙计!
            【解决方案8】:

            有同样的例外。就我而言,我必须以管理员权限运行命令提示符。

            从开始菜单中,右键单击命令提示符,选择“以管理员身份运行”。

            【讨论】:

            • 我的情况是以管理员身份运行 Visual Studio 2015。 (做一个 Web API 项目。)
            【解决方案9】:

            启动开发人员命令行“作为管理员”。此帐户拥有安全日志的完全访问权限

            【讨论】:

              【解决方案10】:

              EventLog.SourceExists 枚举HKLM\SYSTEM\CurrentControlSet\services\eventlog 的子键,看是否包含指定名称的子键。如果运行代码的用户帐户在找到目标源之前对其尝试访问的子项(在您的情况下为 Security 子项)没有读取权限,您将看到一个异常,如您所拥有的描述。

              处理此类问题的常用方法是在安装时(在管理员帐户下)register event log sources,然后假设它们在运行时存在,如果目标事件日志源不存在,则允许将任何导致的异常视为意外实际存在于运行时。

              【讨论】:

              • 在 Windows 8 上,似乎即使禁用 UAC 并且用户是管理员,仍然需要以管理员身份运行 VS。这就是我的情况的解决方案
              • 对我来说,第一次以管理员身份运行应用程序就足够了。之后,创建了事件源,应用程序运行良好。
              • 这是一个示例,说明 Windows 如何不鼓励使用操作系统中的嵌入式工具
              • 这对我不起作用,对我有用的是暂时禁用代码中的模拟,有关更多详细信息,请查看此 The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.
              猜你喜欢
              • 2016-07-18
              • 2014-08-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-14
              • 2019-04-03
              相关资源
              最近更新 更多