web-dev-qa-db-ja.com

IIS7 ASP.Net 3.5アプリケーションがイベントソースを作成してWindows EventLogにイベントを記録できるようにするには、何を変更する必要がありますか?

IIS 7で実行されているASP.Net 3.5では、これをそのまま使用することはできません。

        if (!EventLog.SourceExists("MyAppLog"))
            EventLog.CreateEventSource("MyAppLog", "Application");

        EventLog myLog = new EventLog();
        myLog.Source = "MyAppLog";
        myLog.WriteEntry("Message");
32
JTew

これは、Windows 2003以降のWindowsセキュリティの一部です。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Applicationの下のレジストリにエントリを作成する必要があります。ネットワークサービスまたは偽装するアカウントがこのレジストリキーへのアクセス許可を持っていることを確認してください。

@CheGueVerraのリンク: 要求されたレジストリアクセスは許可されていません

24
Aaron Fischer

私はこの回答を here からコピーしました(質問はLog4Netでしたが、回答はまだ適用されます)。 technetリンクは重要な一歩を見逃しています。

レジストリキーを作成する

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\MY-AWESOME-APP

この中に文字列値を作成します

EventMessageFileという名前を付け、その値を

C:\ Windows\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll

そのパスは、64ビット環境と32ビット環境の両方で機能するようです。

この手法を使用すると、レジストリにアクセス許可を設定する必要はありません。上記のキーが作成されると、機能するはずです。

または
大きなサーバーファームがなく、小さな "Webガーデン"しかない場合は、各サーバーでコンソールアプリケーションを実行して、イベントログソースを作成します EventLog.CreateEventSource 、コンソールアプリケーションが管理者によって実行されていることを確認してください。

37
Chris S

アプリケーションを右クリックして、「管理者として実行」を選択します

2
MacGyver