最近在对应一个ASP.NET Web应用程序Bug的时候,为了调查运行环境中具体的Bug于是查阅了一下错误日志。
这个程序的错误日志是直接保存在一个文本文件中的,结果发现就算是出错也不会留下任何痕迹。
一调试,竟然是把错误日志的保存路径给写错了。My God!
把路径改了,转念一想下次出错再不保存怎么办?谁知道真正的环境里会出什么状况呢。
于是乎,出错了就直接把错误日志写到服务器的EventLog上吧。
三下五除二改完了就等着好消息呢。
可是左等右等还是没有日志留下来,Bug还是照旧。
一查,嘿,不让写EventLog。
网上一查,果然已经有前车之鉴。微软官方上也有解决方法。
按照第一个方法做了一下,改了服务器的注册表就好用了。
第二个就没尝试了。
解决问题的文章就摘下来做个经验保留。
地址:http://support.microsoft.com/?scid=kb;zh-cn;329291&spid=810&sid=58#appliesto
原文:
症状 使用 ASP.NET 在事件日志中创建一个新的事件源时,您可能会收到下面的错误信息:System.Security.SecurityException:Requested registry access is not allowed.
原因 默认情况下,ASP.NET 工作进程的用户令牌是 ASPNET(或者,对于 Internet 信息服务 [IIS] 6.0 上运行的应用程序是 NetworkService)。由于您的帐户不具有创建事件源的正确用户权限,会出现“症状”部分中的问题。
解决方案
警告 :注册表编辑器使用不当可导致严重问题,从而可能需要重新安装操作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。 要解决此问题,在您运行 ASP.NET Web 应用程序之前,拥有管理权限的用户必须创建事件源。要创建事件源,请使用下列方法之一。
第一种方法
<script type="text/javascript"> </script> 在注册表编辑器中,在应用程序 事件日志下创建一个事件源。为此,请执行下列步骤:
- 单击“开始”,然后单击“运行”。
- 在“打开”文本框中,键入 regedit 。
- 找到以下注册表子项:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application
- 右键单击“Application”子项,指向“新建”,然后单击“项”。
- 键入 TEST 作为该项的名称。
- 关闭注册表编辑器。
第二种方法
<script type="text/javascript"> </script> System.Diagnostics 名称空间中的 EventLogInstaller 类允许您安装和配置一个事件日志,您的应用程序在运行时可以读取或写入该事件日志。您可以使用 EventLogInstaller 创建一个事件源。为此,请执行下列步骤:
- 使 用 Microsoft Visual Basic .NET 或 Microsoft Visual C# .NET 创建一个新的名为 EventLogSourceInstaller 的“类库”。默认情况下,将创建“Class1.vb”文件或“Class1.cs”文件。
- 在解决方案资源管理器中,右键单击“EventLogSourceInstaller”,然后单击“添加引用”。
- 在“添加引用”对话框中,双击“System.Configuration.Install.dll”,然后单击“确定”。
- 将 Class1.vb/Class1.cs 重命名为 MyEventLogInstaller.vb/MyEventLogInstaller.cs。
- 用以下示例代码替换 MyEventLogInstaller.vb 或 MyEventLogInstaller.cs 中现有的代码:
Visual Basic .NET 示例
Visual C# .NET 示例
6. 在“生成”菜单中,单击“生成解决方案”以生成“EventLogSourceInstaller.dll”。
7.打开“Visual Studio .NET 命令提示符”。
8.在该命令提示符下,更改到“EventLogSourceInstaller.dll”所在的文件夹。
9.运行以下命令以生成 EventSource: InstallUtil EventLogSourceInstaller.dll
重现此问题的步骤
- 使用 Visual Basic .NET 或 Visual C# .NET 创建一个新的“ASP.NET Web 应用程序”。默认情况下,将创建“WebForm1.aspx”文件。
- 在“WebForm1.aspx”的 HTML 视图中,用以下示例代码替换现有代码:
Visual Basic .NET 示例
Visual C# .NET 示例
3. 在“调试”菜单上,单击“开始”以在浏览器中查看“WebForm1.aspx”页面。
4. 在“TextBox”中键入一些文字,然后单击“写入事件日志”。
5. 本文“症状”部分讨论的错误信息将会出现。
6. 要解决此问题,请创建一个如“解决方案”部分所讨论的事件源,并在“WebForm1.aspx”中给下列代码添加注释:
7. 重复步骤 3 和 4。
这篇文章中的信息适用于:
- Microsoft ASP.NET 1.1
- Microsoft Visual Basic .NET 2003 标准版
- Microsoft Visual C# .NET 2003 标准版
- Microsoft ASP.NET 1.0
- Microsoft Visual .NET 2002 标准版
- Microsoft Visual C# .NET 2002 标准版
- Microsoft Internet Information Services 5.0
- Microsoft Internet Information Services 6.0