ไม่พบแหล่งที่มา แต่ไม่สามารถค้นหาบันทึกเหตุการณ์บางส่วนหรือทั้งหมดได้


125

ฉันได้รับข้อยกเว้นต่อไปนี้ ฉันให้การควบคุมบัญชี Asp.net อย่างสมบูรณ์ใน Eventlogs ใน Registry edit

[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

2
สำหรับฉันมันเพียงพอที่จะเรียกใช้แอปพลิเคชันในฐานะผู้ดูแลระบบในครั้งแรกเท่านั้น หลังจากนั้นแหล่งที่มาของเหตุการณ์จะถูกสร้างขึ้นและแอปพลิเคชันทำงานได้ดี
thomaskonrad

2
นี่คือตัวอย่างวิธีที่ windows กีดกันการใช้เครื่องมือฝังตัวในระบบปฏิบัติการ
Felice Pollano

68

มีข้อยกเว้นเดียวกัน ในกรณีของฉันฉันต้องเรียกใช้พรอมต์คำสั่งด้วยสิทธิ์ของผู้ดูแลระบบ

จากเมนู Start คลิกขวาที่ Command Prompt เลือก "Run as administrator"


2
สถานการณ์ของเหมืองคือการเรียกใช้ Visual Studio 2015 ในฐานะผู้ดูแลระบบ (กำลังทำโครงการ Web API)
Kevin .NET

9

สำหรับฉันข้อผิดพลาดนี้เกิดจากพรอมต์คำสั่งซึ่งไม่ได้ทำงานภายใต้สิทธิ์ของผู้ดูแลระบบ คุณต้องคลิกขวาที่พรอมต์คำสั่งแล้วพูดว่า " Run as administrator "

คุณต้องมีบทบาทผู้ดูแลระบบเพื่อติดตั้งหรือถอนการติดตั้งบริการ


ฉันอึกอักอยู่ประมาณ 2 ชั่วโมงขอบคุณเพื่อน!
Mox Shah

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

ฉันทำเช่นเดียวกัน ฉันเพิ่งสร้างคีย์ใหม่ด้วยชื่อแหล่งที่มาที่ฉันใช้ในแอปพลิเคชันของฉันและมันใช้งานได้
Campinho


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 ชี้ให้เห็นว่าเกิดจากการค้นหาคีย์ใน Registry ที่ล้มเหลว

ในการแก้ปัญหานี้สำหรับ 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ชื่อที่ควรจะเป็นและข้อมูลค่าที่ควรจะเป็นEventMessageFileC:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll

คำสำคัญ: signalr, sensenet, regedit, permissions


0

หากคุณต้องการเพียงแค่ดมกลิ่นหากมีแหล่งที่มาในเครื่องท้องถิ่น แต่ไม่มีความสามารถในการได้รับอนุญาตให้ทำสิ่งนี้คุณสามารถใช้นิ้วผ่านตัวอย่างต่อไปนี้ (VB)

สิ่งนี้ข้ามข้อผิดพลาดด้านความปลอดภัย คุณสามารถแก้ไขฟังก์ชันนี้ในทำนองเดียวกันเพื่อส่งคืน LogName สำหรับ Source

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.