7

ASP.NET Web アプリケーションで常に書き込み可能なイベント ログ ソースはありますか?

誰かが一見無関係な解決策を持っている場合の裏話:

ASP.NET webapp は独自のイベント ログ ソースを使用しますが、それを作成する権限がありません。そのため、webapp がエントリを書き込もうとしたときにイベント ログ ソースが存在しない場合 (インストール手順では、管理者がイベント ログ ソースを手動で登録するように指示されていますが……)、webapp は何も入力しません。問題が発生した場合のイベント ログ。

イベントログを見ている人に通知するために使用できる別の(アプリに依存しない)ソースがあることを願っています。

4

5 に答える 5

2

この KB 記事では、問題について説明しています http://support.microsoft.com/kb/329291

PRB: ASP.NET アプリケーションが EventLog に新しい EventSource を書き込もうとすると、「要求されたレジストリ アクセスは許可されていません」というエラー メッセージが表示される

症状

ASP.NET を使用してイベント ログに新しいイベント ソースを作成すると、次のエラー メッセージが表示される場合があります。

System.Security.SecurityException: 要求されたレジストリ アクセスは許可されていません。

原因

既定では、ASP.NET ワーカー プロセスのユーザー トークンは ASPNET (または、インターネット インフォメーション サービス [IIS] 6.0 で実行されるアプリケーションの場合は NetworkService) です。「現象」セクションの問題は、アカウントがイベント ソースを作成するための適切なユーザー権限を持っていないために発生します。

解像度

最初のアプローチ:

レジストリ エディター (開発用 PC ではなくサーバー上)のアプリケーション イベント ログの下にイベント ソースを作成します。これを行うには、次の手順を実行します。

  1. サーバーの Windows デスクトップにアクセスします。[スタート] をクリックし、[実行] をクリックします。
  2. [名前] テキスト ボックスに「regedit」と入力します。
  3. 次のレジストリ サブキーを見つけます。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. Application サブキーを右クリックし、 [新規] をポイントして、[キー] をクリックします。
  5. TESTキー名に「 」と入力します。
  6. レジストリ エディタを閉じます。

2 番目の (代替) アプローチ:

名前空間のEventLogInstallerクラスをSystem.Diagnostics使用すると、実行中にアプリケーションが読み書きするイベント ログをインストールして構成できます。を使用して、イベント ソースを作成できますEventLogInstaller。これを行うには、次の手順を実行します。

  1. Microsoft Visual Basic .NET または Microsoft Visual C# .NET を使用して、EventLogSourceInstaller という名前の新しいクラス ライブラリを作成します。デフォルトでは、Class1.vb ファイルまたは Class1.cs ファイルが作成されます。
  2. ソリューション エクスプローラーで を右クリックEventLogSourceInstallerし、[参照の追加] をクリックします。
  3. [参照の追加] ダイアログ ボックスで、 をダブルクリックSystem.Configuration.Install.dllし、[OK] をクリックします。
  4. 「Class1.cs」の名前Class1.vbを MyEventLogInstaller.vb\MyEventLogInstaller.cs に変更します。
  5. MyEventLogInstaller.vbまたはMyEventLogInstaller.cs次のサンプル コード で既存のコードを置き換えます。 Visual Basic .NET のサンプル
Imports System.Diagnostics
Imports System.Configuration.Install
Imports System.ComponentModel

<RunInstaller(True)> _
Public Class MyEventLogInstaller
    Inherits Installer
    Private myEventLogInstaller As EventLogInstaller

    Public Sub New()
        ' Create an instance of 'EventLogInstaller'.
        myEventLogInstaller = New EventLogInstaller()
        ' Set the 'Source' of the event log, to be created.
        myEventLogInstaller.Source = "TEST"
        ' Set the 'Log' that the source is created in.
        myEventLogInstaller.Log = "Application"
        ' Add myEventLogInstaller to 'InstallerCollection'.
        Installers.Add(myEventLogInstaller)
    End Sub 
End Class 

ビジュアル C# .NET サンプル

using System;
using System.Diagnostics;
using System.ComponentModel;
using System.Configuration.Install;


namespace EventLogSourceInstaller 
{
  [RunInstaller(true)]
  public class MyEventLogInstaller : Installer
  {
      private EventLogInstaller myEventLogInstaller;

      public MyEventLogInstaller()
      {
          //Create Instance of EventLogInstaller
          myEventLogInstaller = new EventLogInstaller();

          // Set the Source of Event Log, to be created.
          myEventLogInstaller.Source = "TEST";

          // Set the Log that source is created in
          myEventLogInstaller.Log = "Application";
          
          // Add myEventLogInstaller to the Installers Collection.
          Installers.Add(myEventLogInstaller);
      }
  }
}
  1. [ビルド] メニューで [ソリューションのビルド] をクリックして、EventLogSourceInstaller.dll を作成します。
  2. Visual Studio .NET コマンド プロンプトを開きます。
  3. コマンド プロンプトで、EventLogSourceInstaller.dll が配置されているフォルダーに移動します。
  4. 次のコマンドを実行して、EventSource を作成します。InstallUtil EventLogSourceInstaller.dll

解像度の下で 2 番目のアプローチを使用する場合は、それを機能させる必要があります。

それをしたくない場合、または正しく機能させられない場合は、別の方法として、ID タグを使用しweb.configて、レジストリを編集する権限を持つユーザーになりすますことができます。これはこのアプリケーション専用のセキュリティ全体ですが、追加のセキュリティ対策を実装すれば問題ありません。

于 2009-12-23T03:00:49.617 に答える
1

メール通知を考慮?一部の管理者は、携帯電話からの通知を好むと思います。

クライアントが HKLM\System\CurrentControlSet\Services\EventLog\ の下にキーを作成することを拒否した場合に備えて、家に電話をかけることもできます (ログを自分のサーバーに書き戻す Web サービスを呼び出します)。

于 2009-12-23T02:48:02.010 に答える
1

「ASP.NET XYZ0」ソースは、いつでも書き込み可能になると思います。

于 2010-11-22T22:17:19.197 に答える
1

Web アプリからイベント ソースを作成するためのアクセス権がない場合がありますが、メモリが機能する場合は、存在するかどうかを確認できます。

global.asax またはカスタム ハンドラーで、想定どおりに作成されたかどうかを確認します。そうでない場合は、すべてのページに非常に迷惑なリマインダー div を表示します。彼らが想定どおりに作成するとすぐに、divは消えます:)

于 2009-12-29T11:42:31.757 に答える
0

組み込みのイベントログ(アプリケーション、セキュリティ、システム)に問題なく書き込むことができるはずです。

于 2009-12-16T20:52:12.487 に答える