如何用在ASP.NET中寫入事件記錄

來源:互聯網
上載者:User
文包含有關編輯註冊表的資訊。編輯註冊表之前,務必先瞭解在發生問題時如何還原註冊表。有關如何還原註冊表的資訊,請查看 Regedit.exe 中的“還原註冊表”說明主題,或 Regedt32.exe 中的“還原登錄機碼”說明主題。
  現象

  當你使用asp.net 向事件記錄中寫入一個新的“事件來源”時,可能會得到如下錯誤訊息: System.Security.SecurityException: 不允許所請求的註冊表訪問權

  原因

  運行asp.net進程的預設悵戶是ASPNET(在IIS6.0下面是NetworkService),而此使用者並沒有許可權來建立“事件來源”。

  解決辦法

  注意:(編輯註冊表會導致系統崩潰之類的微軟嚇你的話就不多說)。如果你需要解決此問題,在你運行此Asp.net程式之前,則必須要由具有管理員權限的使用者來建立一個“事件來源”。下面有幾個方法用來建立 “事件來源”。

  第一個方法

  使用下列步驟在註冊表編輯中在”應用程式記錄檔”下面建立一個“事件來源”

   1. 點擊“開始”,再點擊“運行”。

   2. 在“開啟”框中輸入“regedit”。

   3. 找到下列子鍵:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

   4. 右擊“Application”點擊“建立”再點“項”

   5. 將此建立項重新命名為“Test”

   6. 關閉登錄編輯程式

  第二個方法

  在System.Diagnostics命名空間中有一個EventLogInstaller類。它能夠建立和配置你的應用程式在運時要讀寫的事件記錄。通過下列步驟,我們能夠使用EventLogInstaller類來建立一個“事件業源”

  1. 用VB.NET或C#來建立一個名為EventLogSourceInstaller的“類庫”。

  2. 在項目中添加對System.Configuration.Install.dll,的引用。

  3. 將自動產生的Class.Vb\Class.cs更命名為MyEventLogInstaller.vb\MyEventLogInstaller.cs。

  4. 在MyEventLogInstaller.vb 或 MyEventLogInstaller.cs中的內容替換為以下代碼:

Visual Basic .NET Sample

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..\computer\DownloadFiles\article\27\, 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 Sample
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..\computer\DownloadFiles\article\27\, 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);
}
}
}

  5. 產生此項目,得到EventLogSourceInstaller.dll。

  6. 開啟Visual Studio .NET 命令提示,轉到EventLogSourceInstaller.dll所在目錄。

  7. 運行此命令來建立“事件來源”:InstallUtil EventLogSourceInstaller.dll

  更詳盡的資訊

  我們通過一個建立一個Web Application來重現以上錯誤以及解決此問題。

  1. 使用VB.Net或C#建立一個Asp.net Web Application。

  2. 在WebForm1.aspx中的代碼替換為以下代碼:

Visual Basic .NET Sample

<%@ 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..\computer\DownloadFiles\article\27\, e As EventArgs)
Dim ev As New EventLog("Application")
' Event's Source name
ev.Source = "TEST"

EventLog.CreateEventSource(ev.Source..\computer\DownloadFiles\article\27\, "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 Sample
<%@ 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..\computer\DownloadFiles\article\27\, EventArgs e)
{
EventLog ev = new EventLog("Application");
// Event's Source name
ev.Source = "TEST";

EventLog.CreateEventSource(ev.Source..\computer\DownloadFiles\article\27\, "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. 按F5啟動此項目。

  4. 在TextBox輸入一些字元,然後點擊Write to Event Log。

  5. 在上面“現象”部分中提到的錯誤訊息會出現。

  6. 要解決此問題,在Webform1.aspx將下面這行代碼注釋

EventLog.CreateEventSource(ev.Source..\computer\DownloadFiles\article\27\, "Application");

  7. 重新啟動此項目。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.