Không tìm thấy nguồn, nhưng không thể tìm kiếm một số hoặc tất cả nhật ký sự kiện


125

Tôi đang nhận được ngoại lệ sau đây. Tôi đã trao toàn quyền kiểm soát tài khoản Asp.net trên Eventlogs trong phần chỉnh sửa Registry.

[SecurityException: Không tìm thấy nguồn, nhưng một số hoặc tất cả các bản ghi sự kiện không thể được tìm kiếm. Nhật ký không thể truy cập: Bảo mật.]

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

Tôi đoán điều này là do một số vấn đề cấu hình trên máy chủ?



Tôi đã đăng câu trả lời của mình và người điều hành đã xóa nó. Vui lòng đảm bảo chạy dịch vụ của bạn dưới dạng hệ thống cục bộ chứ không phải hệ thống khác vì hệ thống cục bộ chỉ có thể tạo nguồn và nhật ký sự kiện. Tôi đang chạy dịch vụ của mình dưới dạng dịch vụ mạng và có ngoại lệ này. Sau đó tôi dừng dịch vụ và khởi động lại như hệ thống cục bộ và nó hoạt động tốt và sau đó tôi dừng lại và khởi động lại dịch vụ của mình dưới dạng dịch vụ mạng và nó hoạt động tốt.
Ziggler

Câu trả lời:


105

EventLog.SourceExistsliệt kê thông qua các khóa con HKLM\SYSTEM\CurrentControlSet\services\eventlogđể xem nó có chứa một khóa con với tên được chỉ định không. Nếu tài khoản người dùng mà mã đang chạy không có quyền truy cập đọc vào một khóa con mà nó cố gắng truy cập (trong trường hợp của bạn, Securitykhóa con) trước khi tìm nguồn đích, bạn sẽ thấy một ngoại lệ như mã bạn đã mô tả.

Cách tiếp cận thông thường để xử lý các vấn đề như vậy là đăng ký nguồn nhật ký sự kiện khi cài đặt (trong tài khoản quản trị viên), sau đó giả sử rằng chúng tồn tại trong thời gian chạy, cho phép bất kỳ ngoại lệ kết quả nào được coi là bất ngờ nếu nguồn nhật ký sự kiện đích không thực sự tồn tại trong thời gian chạy.


26
Trên Windows 8, dường như ngay cả khi UAC bị vô hiệu hóa VÀ người dùng là Quản trị viên, vẫn cần phải chạy VS với tư cách Quản trị viên. đó là giải pháp cho trường hợp của tôi
itho

2
Đối với tôi, lần đầu tiên chạy ứng dụng là Quản trị viên là đủ. Sau đó, nguồn sự kiện đã được tạo và ứng dụng hoạt động tốt.
thomaskonrad

2
đây là một ví dụ về cách các cửa sổ không khuyến khích sử dụng các công cụ nhúng trong HĐH
Felice Pollano 7/07/17

67

Có ngoại lệ tương tự. Trong trường hợp của tôi, tôi đã phải chạy Command Prompt với quyền quản trị viên.

Từ Menu Bắt đầu, nhấp chuột phải vào Dấu nhắc Lệnh, chọn "Chạy với tư cách quản trị viên".


2
Tình huống của tôi là chạy Visual Studio 2015 với tư cách quản trị viên. (thực hiện dự án API Web.)
Kevin .NET

9

Đối với tôi lỗi này là do dấu nhắc lệnh, không chạy dưới quyền quản trị viên. Bạn cần nhấp chuột phải vào dấu nhắc lệnh và nói " Chạy với tư cách quản trị viên ".

Bạn cần vai trò quản trị viên để cài đặt hoặc gỡ cài đặt dịch vụ.


Tôi đã dò dẫm khoảng 2 giờ, Cảm ơn bạn!
Mox Shah

8

Khởi chạy dòng lệnh Nhà phát triển "Là Quản trị viên". Tài khoản này có toàn quyền truy cập vào Nhật ký bảo mật


6

Không làm việc cho tôi.

Tôi đã tạo một khóa và giá trị chuỗi mới và quản lý để làm cho nó hoạt động

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

Tôi làm giống vậy. Tôi vừa tạo một khóa mới với tên nguồn tôi đang sử dụng bên trong ứng dụng của mình và nó đã hoạt động.
Campinho

1

Đối với tôi chỉ hoạt động iisreset (chạy cmd với tư cách quản trị viên -> iisreset). Có lẽ ai đó có thể cho nó một thử.


1

Nhật ký không thể truy cập: Bảo mật

Nguồn sự kiện mới cần có một tên duy nhất trên tất cả các nhật ký bao gồm Bảo mật (cần đặc quyền của quản trị viên khi được đọc).

Vì vậy, ứng dụng của bạn sẽ cần đặc quyền quản trị để tạo nguồn. Nhưng đó có lẽ là một quá mức cần thiết.

Tôi đã viết kịch bản powershell này để tạo nguồn sự kiện theo ý muốn. Lưu nó như *.ps1và chạy nó với bất kỳ đặc quyền và nó sẽ tự nâng cao.

# 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

Gần đây tôi đã gặp lỗi và không có giải pháp nào hiệu quả với tôi. Điều đã giải quyết lỗi cho tôi là thêm người dùng nhóm Ứng dụng vào nhóm Người dùng quyền lực trong quản lý máy tính. Tôi không thể sử dụng nhóm Quản trị viên do chính sách của công ty.


0

Nếu bạn đang thực hiện cài đặt mới của trang web Quản lý tác vụ SenseNet trên IIS (từ mã nguồn, không phải WebPI), bạn sẽ nhận được thông báo này, thường liên quan đến giao tiếp SignalR. Như @ nicole-caliniou chỉ ra, đó là do tìm kiếm khóa trong Sổ đăng ký không thành công.

Để giải quyết vấn đề này cho SenseNet Task Manager Management v1.1.0, trước tiên hãy tìm tên khóa đăng ký trong tệp web.config. Theo mặc định, nó là "SnTaskWeb".

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

Mở trình soạn thảo sổ đăng ký regedit.exevà điều hướng đến HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask. Nhấp chuột phải vào SnTask và chọn New Keyvà đặt tên cho khóa SnTaskWebcho cấu hình hiển thị ở trên. Sau đó nhấp chuột phải vào SnTaskWebphần tử và chọn New Expandable String Value. Tên phải là EventMessageFilevà dữ liệu giá trị nên được C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll.

Từ khóa: signalr, Sensenet, regedit, quyền


0

Nếu bạn chỉ muốn đánh hơi nếu Nguồn tồn tại trên máy cục bộ nhưng không có khả năng được ủy quyền để thực hiện việc này, bạn có thể dùng ngón tay thông qua ví dụ sau (VB).

Điều này bỏ qua lỗi bảo mật. Bạn có thể sửa đổi tương tự chức năng này để trả về LogName cho Nguồn.

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.