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

文書翻訳 文書翻訳
文書番号: 329291 - 対象製品
重要 : この資料には、レジストリの編集方法が記載されています。万一に備えて、編集の前には必ずシステムの復元方法を理解しておいてください。バックアップ、復元、および編集方法の詳細については、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
256986 Description of the Microsoft Windows Registry
256986 Microsoft Windows レジストリの説明
すべて展開する | すべて折りたたむ

目次

現象

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. を繰り返します。

関連情報

詳細については、次のマイクロソフト Web サイトを参照してください。
http://www.microsoft.com/japan/msdn/library/ja/Vbcon/html/vbwlkWalkthroughCreatingEventLogInstallers.asp
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemDiagnosticsEventLogClassTopic.asp

関連情報

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

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

プロパティ

文書番号: 329291 - 最終更新日: 2005年7月11日 - リビジョン: 2.5
この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Internet Information Services 5.0
  • Microsoft Internet Information Services version 5.1
  • Microsoft Internet Information Services 6.0
キーワード:?
kberrmsg kbwebforms kbsecurity kbprb KB329291
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com