如何用asp
如何用asp.net写事件日志
来源:http://support.microsoft.com/default.aspx?scid=kb;en-us;329291
关键字:asp.net
事件日志 错误消息
重要事项
本文包含有关编辑注册表的信息。编辑注册表之前,务必先了解在发生问题时如何还原注册表。有关如何还原注册表的信息,请查看 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, 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, 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, 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 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, 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. 按F5启动此项目。
4. 在TextBox输入一些字符,然后点击Write to Event Log。
5. 在上面“现象”部分中提到的错误消息会出现。
6. 要解决此问题,在Webform1.aspx将下面这行代码注释
EventLog.CreateEventSource(ev.Source,
"Application");
7. 重新启动此项目。
参考
要取得更详尽的信息,请访问微软网站: