Sumber tidak ditemukan, tetapi beberapa atau semua log peristiwa tidak dapat dicari

125

Saya mendapatkan pengecualian berikut. Saya telah memberikan kontrol penuh ke akun Asp.net pada Eventlogs di Registry edit.

[SecurityException: Sumbernya tidak ditemukan, tetapi beberapa atau semua log peristiwa tidak dapat dicari. Log yang tidak dapat diakses: Keamanan.]

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

Saya kira ini karena masalah konfigurasi pada server?

Vaibhav Jain
sumber
Saya memposting jawaban saya dan moderator menghapusnya. Pastikan untuk menjalankan layanan Anda sebagai sistem lokal tetapi bukan yang lain karena sistem lokal hanya dapat membuat log dan sumber acara. Saya menjalankan layanan saya sebagai layanan jaringan dan mendapatkan pengecualian ini. Kemudian saya menghentikan layanan dan memulai kembali sebagai sistem lokal dan itu berfungsi dengan baik dan setelah itu saya berhenti dan memulai kembali layanan saya sebagai layanan jaringan dan itu bekerja dengan baik.
Ziggler

Jawaban:

105

EventLog.SourceExistsmenghitung melalui subkunci HKLM\SYSTEM\CurrentControlSet\services\eventloguntuk melihat apakah berisi subkunci dengan nama yang ditentukan. Jika akun pengguna yang menjalankan kode tidak memiliki akses baca ke subkunci yang berupaya diakses (dalam kasus Anda, Securitysubkunci) sebelum menemukan sumber target, Anda akan melihat pengecualian seperti yang telah Anda jelaskan.

Pendekatan yang biasa untuk menangani masalah tersebut adalah dengan mendaftarkan sumber log peristiwa pada waktu pemasangan (di bawah akun administrator), kemudian menganggap bahwa mereka ada pada saat runtime, memungkinkan pengecualian yang dihasilkan diperlakukan sebagai tak terduga jika sumber log peristiwa target tidak benar-benar ada saat runtime.

Nicole Calinoiu
sumber
26
Pada Windows 8, tampaknya bahkan ketika UAC dinonaktifkan DAN pengguna adalah Administrator, masih diperlukan untuk menjalankan VS sebagai Admin. itulah solusi pada kasus saya
itsho
2
Bagi saya, itu sudah cukup untuk menjalankan aplikasi sebagai Administrator hanya pertama kali. Setelah itu, sumber acara dibuat dan aplikasi berfungsi dengan baik.
thomaskonrad
2
ini adalah contoh bagaimana windows mencegah penggunaan alat yang tertanam di OS
Felice Pollano
67

Punya pengecualian yang sama. Dalam kasus saya, saya harus menjalankan Command Prompt dengan Hak Administrator.

Dari Start Menu, klik kanan pada Command Prompt, pilih "Run as administrator".

cinta hidup
sumber
2
Situasi saya adalah menjalankan Visual Studio 2015 sebagai administrator. (melakukan proyek Web API.)
Kevin .NET
9

Bagi saya kesalahan ini disebabkan oleh prompt perintah, yang tidak berjalan di bawah hak administrator. Anda perlu mengklik kanan pada prompt perintah dan mengatakan " Jalankan sebagai administrator ".

Anda memerlukan peran administrator untuk menginstal atau menghapus layanan.

Raza
sumber
Saya meraba-raba sekitar 2 jam, Terima kasih sobat!
Mox Shah
8

Luncurkan baris perintah Pengembang "Sebagai Administrator". Akun ini memiliki akses penuh ke log Keamanan

dmolisher
sumber
6

Tidak bekerja untuk saya.

Saya membuat nilai kunci dan string baru dan berhasil membuatnya berfungsi

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
Mike Hart
sumber
Saya melakukan hal yang sama. Saya baru saja membuat kunci baru dengan nama sumber yang saya gunakan di dalam aplikasi saya dan itu berhasil.
Campinho
1

Bagi saya hanya bekerja iisreset (jalankan cmd sebagai administrator -> iisreset). Mungkin seseorang bisa mencobanya.

Miroslav Bihari
sumber
1

Log tidak dapat diakses: Keamanan

Sumber acara baru perlu memiliki nama unik di semua log termasuk Keamanan (yang memerlukan hak admin saat sedang dibaca).

Jadi aplikasi Anda akan membutuhkan hak admin untuk membuat sumber. Tapi itu mungkin berlebihan.

Saya menulis skrip powershell ini untuk membuat sumber acara sesuka hati. Simpan sebagai *.ps1dan jalankan dengan hak istimewa apa pun dan itu akan meningkat dengan sendirinya.

# 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');
Bizhan
sumber
1

Baru-baru ini saya mengalami kesalahan, dan tidak ada solusi yang bekerja untuk saya. Apa yang menyelesaikan kesalahan bagi saya adalah menambahkan pengguna Application pool ke grup Power Users dalam manajemen komputer. Saya tidak dapat menggunakan grup Administrator karena kebijakan perusahaan.

Mandi
sumber
0

Jika Anda melakukan instalasi baru situs web SenseNet TaskManagement di IIS (dari kode sumber, bukan WebPI), Anda akan mendapatkan pesan ini, biasanya terkait dengan komunikasi SignalR. Seperti yang ditunjukkan oleh @ nicole-caliniou, itu karena pencarian kunci di Registry yang gagal.

Untuk mengatasi ini untuk SenseNet TaskManagement v1.1.0, pertama temukan nama kunci registri di file web.config. Secara default itu adalah "SnTaskWeb".

 <appSettings>
   <add key="LogSourceName" value="SnTaskWeb" />

Buka editor registri regedit.exe,, dan navigasikan ke HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask. Klik kanan pada SnTask dan pilih New Key, dan beri nama kunci SnTaskWebuntuk konfigurasi yang ditunjukkan di atas. Kemudian klik kanan pada SnTaskWebelemen dan pilih New Expandable String Value. Nama harus EventMessageFiledan data nilai harus C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll.

Kata kunci: signalr, sensenet, regedit, izin

Thane Plummer
sumber
0

Jika Anda hanya ingin mengendus jika ada Sumber di mesin lokal tetapi tidak memiliki kemampuan untuk mendapatkan otorisasi untuk melakukan ini, Anda dapat menelusuri melalui contoh berikut (VB).

Ini memintas kesalahan keamanan. Anda juga dapat memodifikasi fungsi ini untuk mengembalikan LogName untuk Sumber.

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