[PRB] ASP.NET アプリケーションによりイベント ログに新しいイベント ソースが書き込まれる際に "要求されたレジストリ アクセスは許可されていません" というエラー メッセージが表示される

重要 : この資料には、レジストリの編集方法が記載されています。万一に備えて、編集の前には必ずシステムの復元方法を理解しておいてください。バックアップ、復元、および編集方法の詳細については、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
256986 Description of the Microsoft Windows Registry

現象

ASP.NET を使用して、イベント ログに新しいイベント ソースを作成すると、次のエラー メッセージが表示されることがあります。
System.Security.SecurityException: 要求されたレジストリ アクセスは許可されていません。

原因

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

解決方法

警告 : レジストリ エディタの使い方を誤ると、深刻な問題が発生することがあります。最悪の場合、オペレーティング システムの再インストールが必要になることがあります。マイクロソフトは、レジストリ エディタの誤用により発生した問題に関しては、一切責任を負わないものとします。レジストリ エディタは、自己の責任においてご使用ください。
この問題を解決するには、Web アプリケーションを実行する前に、管理者権限を持つユーザーが ASP.NET イベント ソースを作成する必要があります。イベント ソースを作成するには、次のいずれかの方法を使用します。

方法 1

レジストリ エディタで、Application イベント ログの下にイベント ソースを作成します。これを行うには、次の手順を実行します。
  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
  2. [名前] ボックスに regedit と入力します。
  3. 次のレジストリ サブキーに移動します。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. Application サブキーを右クリックし、[新規] をポイントして、[キー] をクリックします。
  5. キー名として TEST と入力します。
  6. レジストリ エディタを閉じます。

方法 2

System.Diagnostics 名前空間の EventLogInstaller クラスを使用すると、アプリケーションが実行中に読み取りや書き込みを行うイベント ログのインストールと構成を行うことができます。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.vb または Class1.cs の名前を、それぞれ 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
    Visual 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);
    }
    }
    }
  6. [ビルド] メニューの [ソリューションのビルド] をクリックして、EventLogSourceInstaller.dll を作成します。
  7. Visual Studio .NET コマンド プロンプトを開きます。
  8. コマンド プロンプトで、EventLogSourceInstaller.dll が格納されているフォルダに移動します。
  9. 次のコマンドを実行して、EventSource を作成します。
    InstallUtil EventLogSourceInstaller.dll

詳細

問題の再現手順

  1. Visual Basic .NET または Visual C# .NET を使用して、新しい [ASP.NET Web アプリケーション] を作成します。デフォルトで、WebForm1.aspx ファイルが作成されます。
  2. WebForm1.aspx の HTML ビューで、既存のコードを次のサンプル コードと置き換えます。


    Visual Basic .NET のサンプル コード
    <%@ Page Language="vb" AutoEventWireup="true" %>
    <%@ Import namespace="System.Diagnostics" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <script language="VB" runat="server">
    Sub WriteEvent_Click(Src As Object, e As EventArgs)
    Dim ev As New EventLog("Application")
    ' Event's Source name
    ev.Source = "TEST"

    EventLog.CreateEventSource(ev.Source, "Application")

    Try
    ev.WriteEntry(TextBox1.Text)
    Catch b as exception
    Response.write ("WriteEntry " & b.message & "<br>")
    End Try
    ev = Nothing
    End Sub
    </script>
    <body>
    <form id="Form1" runat="server">
    Event message:
    <asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>
    <asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Write to event log"></asp:button>
    </form>
    </body>
    </HTML>
    Visual C# .NET のサンプル コード
    <%@ Page Language="c#" AutoEventWireup="true" %>
    <%@ Import namespace="System.Diagnostics" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <script language="C#" runat="server">
    void WriteEvent_Click(Object Src, EventArgs e)
    {
    EventLog ev = new EventLog("Application");
    // Event's Source name
    ev.Source = "TEST";

    EventLog.CreateEventSource(ev.Source, "Application");
    try
    {
    ev.WriteEntry(TextBox1.Text);
    }
    catch (Exception b)
    {
    Response.Write("WriteEntry " + b.Message + "<br>");
    }
    ev = null;
    }
    </script>
    <body>
    <form id="Form1" runat="server">
    Event message:
    <asp:textbox id="TextBox1" runat="server" Width="233px"></asp:textbox>
    <asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="Write to event log"></asp:button>
    </form>
    </body>
    </HTML>
  3. [デバッグ] メニューの [開始] をクリックして、ブラウザで WebForm1.aspx ページを表示します。
  4. テキスト ボックスに任意のテキストを入力して、[Write to event log] をクリックします。
  5. この資料の「現象」に記載されているエラー メッセージが表示されます。
  6. この問題を解決するには、「解決方法」に記載されている手順でイベント ソースを作成し、WebForm1.aspx の次のコードをコメントにします。
    EventLog.CreateEventSource(ev.Source, "Application")
  7. 手順 3. ~ 4. を繰り返します。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 329291 (最終更新日 2003-09-15) を基に作成したものです。


この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
プロパティ

文書番号:329291 - 最終更新日: 2009/05/21 - リビジョン: 1

フィードバック