职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 949|回复: 0

如何用在ASP.NET中写入事件日志

[复制链接]
joe 发表于 2007-2-8 19:00 | 显示全部楼层 |阅读模式
文包含有关编辑注册表的信息。编辑注册表之前,务必先了解在发生问题时如何还原注册表。有关如何还原注册表的信息,请查看 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. 重新启动此项目。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-12 16:16 , Processed in 0.125290 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表