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

问题描述 投票:113回答:8

我收到以下异常。我在Registry编辑的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

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

c# .net windows-7 event-log securityexception
8个回答
98
投票

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

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


65
投票

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

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


9
投票

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

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


8
投票

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


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

0
投票

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


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

关键词:信号器,sensenet,注册表,权限


0
投票

无法访问的日志:安全性

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

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

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

# 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');
© www.soinside.com 2019 - 2024. All rights reserved.