Kaynak bulunamadı, ancak olay günlüklerinin bir kısmı veya tamamı aranamadı


125

Aşağıdaki istisnayı alıyorum. Kayıt Defteri düzenlemesinde Olay Günlükleri üzerinde Asp.net hesabına tam kontrol verdim.

[SecurityException: Kaynak bulunamadı, ancak olay günlüklerinin bir kısmı veya tamamı aranamadı. Erişilemeyen günlükler: Güvenlik.]

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

Sanırım bunun nedeni sunucudaki bazı yapılandırma sorunları mı?



Cevabımı gönderdim ve moderatör sildi. Lütfen hizmetinizi yerel sistem olarak çalıştırdığınızdan, ancak yerel sistem yalnızca olay günlükleri ve kaynakları oluşturabildiğinden başka bir şekilde çalıştırmadığınızdan emin olun. Servisimi şebeke servisi olarak çalıştırıyordum ve bu istisnayı aldım. Daha sonra servisi durdurdum ve yerel sistem olarak yeniden başlattım ve iyi çalıştı ve bundan sonra servisimi ağ servisi olarak durdurup yeniden başlattım ve iyi çalıştı.
Ziggler

Yanıtlar:


105

EventLog.SourceExistsHKLM\SYSTEM\CurrentControlSet\services\eventlogbelirtilen ada sahip bir alt anahtar içerip içermediğini görmek için alt anahtarları aracılığıyla numaralandırır . Kodun altında çalıştığı kullanıcı hesabı Security, hedef kaynağı bulmadan önce erişmeye çalıştığı bir alt anahtara (sizin durumunuzda, alt anahtara) okuma erişimine sahip değilse , tanımladığınız gibi bir istisna göreceksiniz.

Bu tür sorunları ele almak için genel yaklaşım, olay günlüğü kaynaklarını yükleme sırasında (bir yönetici hesabı altında) kaydetmek , ardından bunların çalışma zamanında var olduğunu varsaymak ve bir hedef olay günlüğü kaynağı gerçekten mevcut değilse, ortaya çıkan herhangi bir istisnanın beklenmedik olarak değerlendirilmesine izin vermektir. işlem esnasında.


26
Windows 8'de, UAC devre dışı bırakıldığında VE kullanıcı Yönetici olsa bile, VS'yi Yönetici olarak çalıştırmak hala gerekli görünüyor. bu benim durumumdaki çözüm
itsho

2
Benim için uygulamayı sadece ilk seferinde Yönetici olarak çalıştırmak yeterliydi. Bundan sonra, olay kaynağı oluşturuldu ve uygulama iyi çalıştı.
thomaskonrad

2
bu, pencerelerin işletim sistemindeki yerleşik araçları kullanmayı nasıl caydırdığına dair bir örnektir
Felice Pollano

67

Aynı istisna vardı. Benim durumumda, Yönetici Hakları ile Komut İstemi çalıştırmam gerekiyordu.

Başlat Menüsünden, Komut İstemi'ne sağ tıklayın, "Yönetici olarak çalıştır" ı seçin.


2
Benim durumum, Visual Studio 2015'i yönetici olarak çalıştırmak. (bir Web API projesi yapıyor.)
Kevin .NET

9

Benim için bu hata, yönetici ayrıcalıkları altında çalışmayan komut isteminden kaynaklanıyordu. Komut istemine sağ tıklamanız ve " Yönetici olarak çalıştır " demeniz gerekir .

Bir hizmeti yüklemek veya kaldırmak için yönetici rolüne ihtiyacınız var.


Yaklaşık 2 saattir beceriksizdim, teşekkürler dostum!
Mox Shah

8

Geliştirici komut satırını "Yönetici Olarak" başlatın. Bu hesabın Güvenlik günlüğüne tam erişimi var


6

Benim için çalışmadı.

Yeni bir anahtar ve dize değeri oluşturdum ve çalışmasını sağladım

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

Ben de aynısını yaptım. Uygulamamın içinde kullandığım kaynak adıyla yeni bir anahtar oluşturdum ve işe yaradı.
Campinho

1

Benim için sadece iisreset çalıştı (cmd'yi yönetici olarak çalıştırın -> iisreset). Belki birisi deneyebilir.


1

Erişilemeyen günlükler: Güvenlik

Yeni bir olay kaynağının Güvenlik dahil tüm günlüklerde benzersiz bir adı olması gerekir (okunduğunda yönetici ayrıcalığına ihtiyaç duyar).

Dolayısıyla, uygulamanızın bir kaynak oluşturmak için yönetici ayrıcalığına ihtiyacı olacaktır . Ama bu muhtemelen aşırı bir öldürme.

Bu powershell betiğini , olay kaynağını istediğiniz zaman oluşturmak için yazdım . Farklı kaydedin *.ps1ve herhangi bir ayrıcalıkla çalıştırın , kendini yükseltir.

# 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

Son zamanlarda hatayı yaşadım ve çözümlerin hiçbiri benim için işe yaramadı. Benim için hatayı çözen şey, Uygulama havuzu kullanıcısını bilgisayar yönetimindeki Power Users grubuna eklemekti. Bir şirket politikası nedeniyle Yönetici grubunu kullanamadım.


0

IIS'de SenseNet TaskManagement web sitesinin yeni bir kurulumunu gerçekleştiriyorsanız (WebPI'dan değil kaynak kodundan), genellikle SignalR iletişimiyle ilgili olan bu mesajı alırsınız. As @ nicole-caliniou işaret, bunun nedeni başarısız Sicil önemli bir aramada etmektir.

Bunu SenseNet TaskManagement v1.1.0 için çözmek için önce web.config dosyasında kayıt defteri anahtarının adını bulun. Varsayılan olarak "SnTaskWeb" dir.

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

Kayıt defteri düzenleyicisini açın regedit.exeve adresine gidin HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask. SnTask'a sağ tıklayın ve yukarıda gösterilen yapılandırma New Keyiçin anahtarı seçin ve adlandırın SnTaskWeb. Ardından SnTaskWeböğeye sağ tıklayın ve seçin New Expandable String Value. İsim olmalı EventMessageFileve değer verisi olmalıdır C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll.

Anahtar kelimeler: signalr, sensenet, regedit, izinler


0

Yerel makinede bir Kaynak olup olmadığını koklamak istiyorsanız, ancak bunu yapmak için yetkiniz yoksa, aşağıdaki örnekte (VB) parmağınızı kullanabilirsiniz.

Bu, güvenlik hatasını atlar. Kaynağın LogName'ini döndürmek için bu işlevi benzer şekilde değiştirebilirsiniz.

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.