9

インスタンスへの書き込みを含むいくつかのビジネス ロジックで作成したライブラリがありSystem.Diagnostics.EventLogます。ライブラリは通常、Windows サービス アプリケーションから呼び出されますが、今回は同じライブラリ関数を ASP.NET MVC アプリケーションから呼び出そうとしています。

ログに書き込む必要があるメソッドに渡す EventLog インスタンスを作成するために、コントローラー内でこのコードを試しました。

Dim log = New EventLog("Application", My.Computer.Name, "MyMVCApp")

ライブラリ メソッド内のコードがログに書き込もうとすると、次のエラーが生成されます。

[SecurityException: Requested registry access is not allowed.]
 System.ThrowHelper.ThrowSecurityException(ExceptionResource resource) +51
 Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) +7462217
 System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) +366
 System.Diagnostics.EventLog.VerifyAndCreateSource(String sourceName, String currentMachineName) +194
 System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData) +205
 System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type) +14

私の Web アプリケーションは、IIS 6 を実行している Windows Server 2003 で Network Service ユーザーとして実行されています。Network Service ユーザーにレジストリへのアクセス権を付与するために何かする必要がありますか?

ASP.NET MVC アプリケーションで使用する EventLog インスタンスを作成するより良い方法はありますか? 参照する必要があるフレームワークによって既に作成されているものはありますか?

4

3 に答える 3

19

MSDN から: 「ネットワーク サービス ID を使用して実行されるアプリケーションは、既存のイベント ソースを使用してイベント ログに書き込むことができますが、レジストリのアクセス許可が不十分なため、新しいイベント ソースを作成できません。」

と...

" EventLog インスタンスに関連付けられたイベント ログのソースが存在しない場合、新しいイベント ソースが作成されます。 "

イベント ログ ソースが存在しないようで、ネットワーク サービス ユーザーを使用して新しいイベント ログ ソースを作成しようとしています (これにはレジストリへの書き込みが必要なため、機能しません)。

「まだ存在しないイベント ソースを使用して ASP.NET アプリケーションがイベント ログに書き込めるようにするには、次の 2 つのオプションがあります。」

  • アプリケーションのインストール時に新しいイベント ソースを作成する
  • レジストリに新しいイベント ソース エントリを手動で作成します。

そのため、アプリケーションの外部でログを作成する必要があります (このユーザーを使用してプログラムで作成することはできません。手動で作成するか、簡単なコマンド ライン アプリを作成してインストールを簡素化します)。

詳細については、次を参照してください。

http://msdn.microsoft.com/en-us/library/ms998320.aspx#paght000015_eventlogaccess

個人的には、ネット ユーザーのアクセス許可を変更するのではなく、Web アプリの外部でログ ソースを作成することをお勧めします。私の好みは、コンソール アプリです (書き込みに約 5 分かかり、他のマシンの準備にも使用できます)。VS.NET で新しいコンソール アプリを起動し、コードを追加してログ ソースを作成します。例:

http://www.dotnetspider.com/resources/23593-Create-Event-log-VB-NET.aspx

次に、適切な権限でログインしたときに、cmd ラインからコンソール アプリを実行します。

于 2009-10-25T08:08:53.833 に答える
0

アプリケーション ログに書き込む代わりに、独自の EventLog を作成できない理由がわかりません。

次のコードを使用してウィンドウ/コンソール アプリケーションを作成し、管理者として実行すると、新しいログが作成されます。

if (!EventLog.Exists("LOG_NAME"))
   EventLog.CreateEventSource("LOG_NAME", "LOG_NAME");

これにより、イベント ログ内に新しいログが作成され、アプリケーション ログとサービス ログに表示されます。

 if (!EventLog.SourceExists("MyMVCApp"))
    EventLog.CreateEventSource("MyMVCApp", "LOG_NAME");

これにより、カスタム「LOG_NAME」内に新しいソースが作成され、コードを利用できます

Dim log = New EventLog("LOG_NAME", My.Computer.Name, "MyMVCApp")

カスタム ログを作成します。

于 2016-01-29T14:19:32.027 に答える