この記事には、レジストリの編集に関する情報が含まれています。レジストリを編集する前に、問題が発生した場合にレジストリを復元する方法を理解しておくことが重要です。レジストリを復元する方法については、Regedit.exe のヘルプ トピック「レジストリの復元」または Regedt32.exe のヘルプ トピック「レジストリ キーの復元」を参照してください。
現象
ASP.NET を使用して新しい「イベント ソース」をイベント ログに書き込むと、次のエラー メッセージが表示される場合があります。 System.Security.SecurityException: 要求されたレジストリ アクセスが
ASP.NET プロセスに
許可されていない理由です
。が実行されています。 デフォルトのユーザーは ASPNET (IIS6.0 では NetworkService) であり、このユーザーには「イベント ソース」を作成する権限がありません。
解決策
に関するメモ: (レジストリを編集するとシステムがクラッシュするなど、あなたを怖がらせたい場合、Microsoft は多くを言いません)。この問題を解決する必要がある場合は、この Asp.net プログラムを実行する前に、管理者権限を持つユーザーが「イベント ソース」を作成する必要があります。 「イベントソース」を作成するにはいくつかの方法があります。
最初の方法では、
次の手順を使用して、レジストリ エディター
1 の「アプリケーション ログ」の下に「イベント ソース」を作成します。 「開始」をクリックし、「実行」をクリックします。
2. 「名前」ボックスに「regedit」と入力します。
3. 次のサブキーを見つけます:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication
4.
5.「アプリケーション」を右クリックし、「新規」をクリックし、「項目」をクリックします
。 この新しい項目の名前を「Test」に変更します
。 6. レジストリエディタを閉じる
2 番目のメソッド
には、System.Diagnostics 名前空間に EventLogInstaller クラスがあります。アプリケーションが実行時に読み書きするイベント ログを作成および構成します。次の手順に従って、EventLogInstaller クラスを使用して「イベント業界のソース」
1 を作成できます。 VB.NET または C# を使用して、EventLogSourceInstaller という「クラス ライブラリ」を作成します。
2. プロジェクトに System.Configuration.Install.dll への参照を追加します。
3. 自動的に生成された Class.VbClass.cs の名前を MyEventLogInstaller.vbMyEventLogInstaller.cs に変更します。
4. MyEventLogInstaller.vb または MyEventLogInstaller.cs の内容を次のコードに置き換えます。
Visual Basic .NET サンプル
インポートSystem.Diagnostics
System.Configuration.Install をインポートします
System.ComponentModel
パブリック クラス MyEventLogInstaller
インストーラーの継承
Private myEventLogInstaller As EventLogInstaller
Public Sub New()
' 「EventLogInstaller」のインスタンスを作成します。
myEventLogInstaller = New EventLogInstaller()
' 作成されるイベント ログの「ソース」を ..computerDownloadFilesarticle27 に設定します。
myEventLogInstaller.Source = "テスト"
' ソースが作成される「ログ」を設定します。
myEventLogInstaller.Log = "アプリケーション"
' myEventLogInstaller を「InstallerCollection」に追加します。
Installers.Add(myEventLogInstaller)
エンドサブ
終了クラス
Visual C# .NET サンプル
システムを使用する;
System.Diagnostics を使用します。
System.ComponentModel を使用します。
System.Configuration.Install を使用します。
名前空間 EventLogSourceInstaller
{
[インストーラーの実行(true)]
パブリック クラス MyEventLogInstaller : インストーラー
{
プライベート EventLogInstaller myEventLogInstaller;
パブリック MyEventLogInstaller()
{
//EventLogInstallerのインスタンスを作成
myEventLogInstaller = new EventLogInstaller();
// 作成されるイベント ログのソースを設定します。computerDownloadFilesarticle27。
myEventLogInstaller.Source = "TEST";
// ソースが作成されるログを設定します。
myEventLogInstaller.Log = "Application";
// myEventLogInstaller をインストーラー コレクションに追加します。
Installers.Add(myEventLogInstaller);
}
}
}
5. このプロジェクトをビルドし、EventLogSourceInstaller.dll を取得します。
6. Visual Studio .NET コマンド プロンプトを開き、EventLogSourceInstaller.dll が存在するディレクトリに移動します。
7. 次のコマンドを実行して「イベント ソース」を作成します: InstallUtil EventLogSourceInstaller.dll
詳細情報
上記のエラーを再現し、Web アプリケーションを作成することでこの問題を解決します。
1. VB.Net または C# を使用して、Asp.net Web アプリケーションを構築します。
2. WebForm1.aspx のコードを次のコードに置き換えます:
Visual Basic .NET サンプル
<%@ ページ言語="vb" AutoEventWireup="true" %>
<%@ インポート名前空間="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<スクリプト言語="VB" runat="サーバー">
Sub WriteEvent_Click(Src As Object..computerDownloadFilesarticle27, e As EventArgs)
Dim ev As New EventLog("アプリケーション")
'イベントのソース名
ev.Source = "TEST"
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
試してください
ev.WriteEntry(TextBox1.Text)
b を例外としてキャッチする
Response.write ("WriteEntry " & b.message & "<br>")
試行を終了する
ev=何もない
エンドサブ
</スクリプト>
<
本文>
<form id="Form1" runat="server">
イベントメッセージ:
<asp:textbox id="TextBox1" runat="server" width="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="イベント ログに書き込む"></asp:button>
</フォーム>
</本文>
</HTML>
Visual C# .NET サンプル
<%@ ページ言語="c#" AutoEventWireup="true" %>
<%@ インポート名前空間="System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<スクリプト言語="C#" runat="サーバー">
void WriteEvent_Click(Object Src..computerDownloadFilesarticle27, EventArgs e)
{
EventLog ev = new EventLog("アプリケーション");
//イベントのソース名
ev.Source = "TEST";
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "アプリケーション")
;
{
ev.WriteEntry(TextBox1.Text);
}
キャッチ (例外 b)
{
Response.Write("WriteEntry " + b.Message + "
");
}
ev = null;
}
</スクリプト>
<
本文>
<form id="Form1" runat="server">
イベントメッセージ:
<asp:textbox id="TextBox1" runat="server" width="233px"></asp:textbox>
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="イベント ログに書き込む"></asp:button>
</フォーム>
</本文>
</HTML>
3. F5 を押してこのプロジェクトを開始します。
4. テキストボックスに文字を入力し、「イベントログに書き込む」をクリックします。
5. 上記の「現象」セクションで説明したエラー メッセージが表示されます。
6. この問題を解決するには、Webform1.aspx の次のコード行をコメント化します。
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "アプリケーション")
; このプロジェクトを再開します。
http://www.cnblogs.com/niit007/archive/2006/08/13/475510.html