Джерело не знайдено, але деякі або всі журнали подій не вдалося шукати


125

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

Я думаю, це пов'язано з певною проблемою конфігурації на сервері?



Я опублікував свою відповідь і модератор видалив її. Будь ласка, не забудьте запустити вашу послугу як локальну систему, але не іншу, оскільки локальна система може створювати лише журнали подій та джерела. Я працював як мережевий сервіс і отримав цей виняток. Пізніше я припинив службу і перезапустив як локальну систему, і вона справно працювала, після чого я зупинив і перезапустив свою послугу як мережевий сервіс, і він працював чудово.
Ziggler

Відповіді:


105

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

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


26
У Windows 8 здається, що навіть коли вимкнено UAC І користувач є адміністратором, все одно необхідно запустити VS як Admin. ось рішення в моєму випадку
itho

2
Для мене було достатньо запустити додаток як адміністратор лише вперше. Після цього було створено джерело події, і додаток справно працював.
Томаскоград

2
це приклад того, як відмовляють Windows за допомогою вбудованих інструментів в ОС
Felice Pollano

67

Мав той самий виняток. У моєму випадку мені довелося запустити командний рядок із правами адміністратора.

У меню "Пуск" клацніть правою кнопкою миші командний рядок і виберіть "Запустити як адміністратор".


2
Моя ситуація полягає в запуску Visual Studio 2015 в якості адміністратора. (роблять проект Web API.)
Kevin .NET

9

Для мене ця помилка була пов'язана з командним рядком, який не працював під правами адміністратора. Вам потрібно клацнути правою кнопкою миші на командному рядку і сказати " Запустити як адміністратор ".

Вам потрібна роль адміністратора, щоб встановити або видалити службу.


Я махав близько 2 годин, дякую товаришу!
Мокс Шах

8

Запустіть командний рядок для розробника "Як адміністратор". Цей обліковий запис має повний доступ до журналу безпеки


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

Недоступні журнали: безпека

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

Таким чином, вашому додатку знадобиться привілей адміністратора для створення джерела. Але це, мабуть, надмірність.

Я написав цей скрипт повноважень, щоб створити джерело події за бажанням. Збережіть його як *.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

Нещодавно я випробував помилку, і жодне з рішень не працювало на мене. Що вирішило помилку для мене, було додавання користувача пулу додатків до групи Power Users в управлінні комп'ютером. Я не міг використовувати групу адміністратора через політику компанії.


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.

Ключові слова: сигналр, сенсетне, 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.