Источник не найден, но некоторые или все журналы событий не удалось найти

Я получаю следующее исключение. Я дал полный контроль Asp.net учетная запись в Eventlogs в реестре edit.

[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

Я думаю, это связано с какой-то проблемой конфигурации на сервере?

8 ответов


EventLog.SourceExists перечисляет через подразделы HKLM\SYSTEM\CurrentControlSet\services\eventlog чтобы узнать, содержит ли он подраздел с указанным именем. Если учетная запись пользователя, под которой выполняется код, не имеет доступа для чтения к подразделу, к которому она пытается получить доступ (в вашем случае Security подраздел) перед поиском целевого источника вы увидите исключение, подобное описанному вами.

обычный подход к решению таких вопросов -Регистрация источников журнала событий во время установки (под учетной записью администратора), затем предположим, что они существуют во время выполнения, позволяя любое результирующее исключение рассматриваться как непредвиденное, если целевой источник журнала событий фактически не существует во время выполнения.


было такое же исключение. В моем случае, мне пришлось запустить командную строку с правами администратора.

в меню Пуск щелкните правой кнопкой мыши на командной строке, выберите "Запуск от имени администратора".


для меня эта ошибка была вызвана командной строкой, которая не работала под правами администратора. Вам нужно щелкнуть правой кнопкой мыши по командной строке и сказать"Запуск от имени администратора".

для установки или удаления службы требуется роль администратора.


Запустите командную строку разработчика "как администратор". Эта учетная запись имеет полный доступ к журналу безопасности


не работал на меня.

Я создал новый ключ и строковое значение и сумел заставить его работать

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

для меня просто работал iisreset (запустите cmd как администратор -> iisreset). Может, кто-нибудь попробует.


если вы выполняете новую установку веб-сайта SenseNet TaskManagement на IIS (из исходного кода, а не WebPI), вы получите это сообщение, обычно связанное с связью SignalR. As @nicole-caliniou указывает, это связано с поиском ключа в реестре, который терпит неудачу.

чтобы решить эту проблему для SenseNet TaskManagement v1.1.0, сначала найдите имя раздела реестра в интернете.конфигурационный файл. По умолчанию это "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, разрешения


недоступные журналы: безопасность

новый источник событий должен иметь уникальное имя во всех журналах, включая безопасность (который нуждается в привилегии администратора, когда он читается).

Так что ваше приложение будет нужно привилегия admin для создания источника. Но это, наверное, перебор.

Я написал сценарий 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');