128

次の例外が発生しています。レジストリ編集のイベント ログで 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

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

4

10 に答える 10

106

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

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

于 2012-03-05T13:22:20.137 に答える
71

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

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

于 2013-08-09T17:19:21.687 に答える
8

私にとってはうまくいきませんでした。

新しいキーと文字列値を作成し、なんとか機能させました

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-02-02T15:47:18.360 に答える
2

アクセスできないログ: セキュリティ

新しいイベント ソースには、セキュリティ(読み取り時に管理者権限が必要)を含むすべてのログで一意の名前が必要です。

したがって、ソースを作成するにはアプリに管理者権限が必要です。しかし、それはおそらくやり過ぎです。

イベント ソースを自由に作成するために、この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');
于 2018-09-12T11:03:39.700 に答える
1

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

于 2015-05-08T09:23:41.187 に答える