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

125

Я получаю следующее исключение. Я предоставил полный контроль над учетной записью 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

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

Вайбхав Джайн
источник
Я опубликовал свой ответ, модератор удалил его. Убедитесь, что ваша служба запущена как локальная система, но не другая, поскольку локальная система может только создавать журналы событий и источники. Я использовал свою службу в качестве сетевой службы и получил это исключение. Позже я остановил службу и перезапустил ее как локальную систему, и она работала нормально, после чего я остановил и перезапустил свою службу как сетевую, и она работала нормально.
Ziggler

Ответы:

105

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

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

Николь Калиною
источник
26
В Windows 8 кажется, что даже когда UAC отключен и пользователь является администратором, все равно необходимо запускать VS от имени администратора. это решение в моем случае
itsho 07
2
Мне достаточно было запустить приложение от имени администратора только первый раз. После этого источник событий был создан и приложение заработало нормально.
thomaskonrad
2
это пример того, как Windows препятствует использованию встроенных инструментов в ОС
Феличе Поллано,
67

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

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

живи любя
источник
2
Моя ситуация - запустить Visual Studio 2015 от имени администратора. (делает проект Web API.)
Кевин .NET,
9

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

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

Раза
источник
Я возился около 2 часов, спасибо, дружище!
Mox Shah
8

Запустите командную строку разработчика «От имени администратора». У этой учетной записи есть полный доступ к журналу безопасности

dmolisher
источник
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
Майк Харт
источник
Я сделал то же самое. Я только что создал новый ключ с именем источника, которое я использую в своем приложении, и он сработал.
Кампиньо
1

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

Мирослав Бихари
источник
1

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

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

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

Я написал этот сценарий 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');
Бижан
источник
1

Недавно я столкнулся с ошибкой, и ни одно из решений не помогло мне. Что разрешило ошибку для меня, так это добавление пользователя пула приложений в группу опытных пользователей в управлении компьютером. Я не мог использовать группу администраторов из-за политики компании.

Манди
источник
0

Если вы выполняете новую установку веб-сайта 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.

Ключевые слова: signalr, sensenet, regedit, разрешения

Тейн Пламмер
источник
0

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

Это обходит ошибку безопасности. Вы можете аналогичным образом изменить эту функцию, чтобы она возвращала имя журнала для источника.

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
Тимоти К. Куинн
источник