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

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

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


person Vaibhav Jain    schedule 05.03.2012    source источник
comment
Возможный дубликат System.Security.SecurityException при записи в журнал событий   -  person Michael Freidgeim    schedule 24.02.2017
comment
Я опубликовал свой ответ, и модератор удалил его. Убедитесь, что ваша служба запущена как локальная система, но не как другая, поскольку локальная система может только создавать журналы событий и источники. Я использовал свою службу в качестве сетевой службы и получил это исключение. Позже я остановил службу и перезапустил ее как локальную систему, и она работала нормально, после чего я остановил и перезапустил свою службу как сетевую, и она работала нормально.   -  person Ziggler    schedule 08.11.2019


Ответы (10)


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

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

person Nicole Calinoiu    schedule 05.03.2012
comment
В Windows 8 кажется, что даже когда UAC отключен и пользователь является администратором, все равно необходимо запускать VS от имени администратора. это решение в моем случае - person itsho; 07.06.2013
comment
Мне достаточно было запустить приложение от имени администратора только первый раз. После этого источник событий был создан, и приложение заработало нормально. - person thomaskonrad; 15.10.2016
comment
это пример того, как Windows препятствует использованию встроенных инструментов в ОС. - person Felice Pollano; 07.07.2017

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

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

person live-love    schedule 09.08.2013
comment
Моя ситуация - запустить Visual Studio 2015 от имени администратора. (выполнение проекта веб-API.) - person Kevin .NET; 09.05.2017

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

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

person Raza    schedule 09.04.2014
comment
Я возился около 2 часов, спасибо, дружище! - person Mox Shah; 09.11.2016

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

person dmolisher    schedule 01.08.2013

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

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

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
person Mike Hart    schedule 02.02.2015
comment
Я сделал то же самое. Я только что создал новый ключ с именем источника, которое использую в своем приложении, и он сработал. - person Campinho; 25.02.2015

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

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

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

Я написал этот сценарий 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');
person Bizhan    schedule 12.09.2018

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

person Miroslav Bihari    schedule 08.05.2015

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

person Mandi    schedule 12.02.2020

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

person Thane Plummer    schedule 28.11.2016

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

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

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
person Timothy C. Quinn    schedule 26.07.2020