找不到源,但无法搜索部分或全部事件日志

时间:2012-03-05 09:38:47

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

我收到以下异常。我在注册表编辑的Eventlogs上完全控制了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

我想这是由于服务器上的某些配置问题?

10 个答案:

答案 0 :(得分:98)

EventLog.SourceExists枚举HKLM\SYSTEM\CurrentControlSet\services\eventlog的子项以查看它是否包含具有指定名称的子项。如果运行代码的用户帐户在找到目标源之前没有对其尝试访问的子键(在您的情况下为Security子键)具有读访问权限,您将看到类似于你已经描述过了。

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

答案 1 :(得分:65)

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

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

答案 2 :(得分:9)

对我来说,此错误是由命令提示符引起的,该命令提示符未在管理员权限下运行。您需要右键单击命令提示符并说出" 以管理员身份运行"。

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

答案 3 :(得分:8)

启动Developer命令行“作为管理员”。此帐户可以完全访问安全日志

答案 4 :(得分: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

答案 5 :(得分:1)

我最近遇到了该错误,没有一种解决方案对我有用。对我来说,解决该错误的方法是将应用程序池用户添加到计算机管理中的“高级用户”组。由于公司政策,我无法使用管理员组。

答案 6 :(得分:0)

对我来说,只是工作iisreset(以管理员身份运行cmd - &gt; iisreset)。也许有人可以尝试一下。

答案 7 :(得分:0)

如果您在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,权限

答案 8 :(得分:0)

  

无法访问的日志:安全性

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

因此,您的应用将需要管理员权限才能创建源。但这可能是一个矫kill过正。

我写了这个 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');

答案 9 :(得分:0)

如果您只是想嗅探本地计算机上是否存在Source,但没有获得执行此操作的授权的权限,则可以通过以下示例(VB)进行操作。

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

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