Источник не найден, но не удалось найти некоторые или все журналы событий
Я получаю следующее исключение. Я дал полный контроль над учетной записью Asp.net на Eventlogs в редактировании реестра.
[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
Я думаю, это связано с какой-то проблемой конфигурации на сервере?
11 ответов
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
Недоступные журналы: безопасность
Новый источник событий должен иметь уникальное имя во всех журналах, включая Security (для которого необходимы права администратора, когда он читается).
Таким образом, вашему приложению понадобятся права администратора для создания источника. Но это, вероятно, излишество.
Я написал этот сценарий 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');
Недавно я столкнулся с ошибкой, и ни одно из решений не помогло мне. Что разрешило ошибку для меня, так это добавление пользователя пула приложений в группу опытных пользователей в управлении компьютером. Я не мог использовать группу администраторов из-за политики компании.
У меня просто работал iisreset (запускаю cmd от имени администратора -> iisreset). Может быть, кто-нибудь может попробовать.
Если вы просто хотите понюхать, существует ли источник на локальном компьютере, но у вас нет возможности получить для этого разрешение, вы можете просмотреть его в следующем примере (VB).
Это обходит ошибку безопасности. Вы можете аналогичным образом изменить эту функцию, чтобы она возвращала имя журнала для источника.
Public Shared Function eventLogSourceExists(sSource as String) as Boolean
Try
EventLog.LogNameFromSourceName(sSource, ".")
Return True
Catch
Return False
End Try
End Function
Если вы выполняете новую установку веб-сайта SenseNet TaskManagement в IIS (из исходного кода, а не из WebPI), вы получите это сообщение, обычно связанное с коммуникацией SignalR. Как указывает @nicole-caliniou, это происходит из-за сбоя поиска по ключу в реестре.
Чтобы решить эту проблему для 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, regedit, разрешения
Если вы видите сообщение об ошибке от
Невозможно зарегистрировать события приложения .NET
Тогда есть большая вероятность, что ваше приложение вообще не создает источник журнала событий, а только использует его, и, поскольку он так и не был найден, вам нужно создать источник самостоятельно. Вот команда для создания источника в PowerShell:
New-EventLog -Source "Имя приложения" -LogName "Приложение"