上一篇:ASP.NET设计控件净化网站语言 >>
如何用在ASP.NET中写入事件日志
现象
当你使用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. 重新启动此项目。
下一篇:了解ASP.NET页面对象模型 >>
相关文章:
- · ASP.NET/Perl.NET 数据库访问例子
- · asp.NET中使用include
- · NT及低配置老机上用ASP.net的体会--M2上也用ASP+
- · 用ASP.NET创建自定义文本框
- · ASP.NET创建并使用Web组件
- · ASP.NET开发员工业绩评测中心
- · ASP.NET中实现模版的动态加载
- · 在ASP.NET中使用用户控件
- · 五种常见的ASP.NET安全缺陷
- · ASP.NET中的HTTP模块和处理程序
- · ASP.NET中使用Treeview和XML
- · 在Asp.net中如何实现弹出提示对话框
- · ASP.NET的跟踪模式详解
- · ASP.NET创建Web Services之概述
- · 在ASP.NET中从SQL Server检索图片
- · ASP.NET系统用户权限设计与实现
- · ASP.NET中TreeView控件使用小结
- · ASP.net的ACCESS数据分页方案
- · ASP.NET中对表单输入行有选择验证
- · 在ASP.NET 2.0中使用页面导航控件
- · ASP.NET四种页面导航方式的比较与选择
- · 利用ASP.NET 2.0创建自定义Web控件
- · ASP.NET 2.0中的DataSource系列控件
- · 使用ASP.NET程序来管理文件或目录的一种方案
- · ASP.NET Web Page应用深入探讨
- · ASP.net中用axWebBrowser中提交表单
- · 在ASP.NET中跟踪和恢复大文件下载
- · 利用ASP.NET的三种缓存提高站点性能
- · 认识ASP.NET会话状态
- · 用ASP/ASP.NET实现网络空间管理
- · ASP.NET 管理实用工具使用方法
- · asp.net开发wap程序必备:识别来访手机品牌型号
- · ASP.NET实现下载功能的中文文件名乱码处理
- · 手工创建datagrid数据列/模板列/按钮事件+简单的数据操作类(asp.net)
- · 在Asp.net中为图像加入版权信息
- · 亲密接触ASP.Net(14)
- · 亲密接触ASP.Net(13)
- · 亲密接触ASP.Net(12)
