ソースは見つかりませんでしたが、一部またはすべてのイベントログを検索できませんでした


125

次の例外が発生します。レジストリ編集のイベントログでAsp.netアカウントを完全に制御しました。

[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

これはサーバーの設定の問題が原因だと思いますか?



回答を投稿し、モデレーターがそれを削除しました。ローカルシステムはイベントログとソースのみを作成できるため、サービスはローカルシステムとして実行してください。サービスをネットワークサービスとして実行していて、この例外が発生しました。その後、サービスを停止してローカルシステムとして再起動し、正常に機能しました。その後、サービスを停止してネットワークサービスとして再起動し、正常に機能しました。
ジグラー

回答:


105

EventLog.SourceExistsのサブキーを列挙しHKLM\SYSTEM\CurrentControlSet\services\eventlogて、指定された名前のサブキーが含まれているかどうかを確認します。コードを実行しているユーザーアカウントにSecurity、ターゲットソースを見つける前にアクセスしようとするサブキー(この場合はサブキー)への読み取りアクセス権がない場合、説明したような例外が表示されます。

このような問題を処理するための通常のアプローチは、インストール時に(管理者アカウントで)イベントログソース登録し、実行時にそれらが存在すると想定して、ターゲットイベントログソースが実際に存在しない場合、結果として生じる例外を予期しないものとして処理できるようにします。実行時。


26
Windows 8では、UACが無効で、ユーザーが管理者であっても、VSを管理者として実行する必要があるようです。それが私の場合の解決策です
itho 2013年

2
私にとっては、アプリケーションを管理者として初めて実行するだけで十分でした。その後、イベントソースが作成され、アプリケーションは正常に動作しました。
thomaskonrad 2016年

2
これは、WindowsがOSの組み込みツールを使用しないようにする方法の例です
Felice Pollano 2017

67

同じ例外がありました。私の場合、管理者権限でコマンドプロンプトを実行する必要がありました。

スタートメニューからコマンドプロンプトを右クリックし、[管理者として実行]を選択します。


2
私の状況は、管理者としてVisual Studio 2015を実行することです。(Web APIプロジェクトを実行しています。)
Kevin .NET

9

私にとってこのエラーは、管理者権限で実行されていなかったコマンドプロンプトが原因でした。コマンドプロンプトを右クリックして、「管理者として実行」と言う必要があります。

サービスをインストールまたはアンインストールするには、管理者の役割が必要です。


私は約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

私も同じことをしました。アプリケーション内で使用しているソース名で新しいキーを作成したところ、うまくいきました。
カンピーニョ2015

1

私にとっては、iisreset(管理者としてcmdを実行-> iisreset)だけで動作しました。多分誰かがそれを試してみることができます。


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

私は最近エラーを経験しました、そして、解決策のどれも私のために働きませんでした。エラーを解決したのは、コンピューター管理でアプリケーションプールユーザーをPower Usersグループに追加することでした。会社のポリシーにより、管理者グループを使用できませんでした。


0

IISでSenseNet TaskManagement Webサイトの新規インストールを実行している場合(WebPIではなくソースコードから)、通常はSignalR通信に関連するこのメッセージが表示されます。@ニコール・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 KeySnTaskWeb上記の構成のキーに名前を付けます。次に、SnTaskWeb要素を右クリックしてを選択しますNew Expandable String Value。名前はでEventMessageFile、値のデータはである必要がありますC:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll

キーワード:シグナル、sensenet、regedit、許可


0

ソースがローカルマシンに存在するが、これを行う権限がない場合にスニッフィングを行いたい場合は、次の例(VB)を使用して探知できます。

これにより、セキュリティエラーが回避されます。同様に、この関数を変更して、ソースのLogNameを返すことができます。

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.