文包含有关编辑注册表的信息。编辑注册表之前,务必先了解在发生问题时如何还原注册表。有关如何还原注册表的信息,请查看 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 sub new() visual c# .net sample namespace eventlogsourceinstaller public myeventloginstaller() // set the source of event log, to be created. // set the log that source is created in // add myeventloginstaller to the installers collection. |
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”) events source name ev.source = “test” eventlog.createeventsource(ev.source, “application”) try <body> visual c# .net sample eventlog.createeventsource(ev.source, “application”); try <body> |
3. 按f5启动此项目。
4. 在textbox输入一些字符,然后点击write to event log。
5. 在上面“现象”部分中提到的错误消息会出现。
6. 要解决此问题,在webform1.aspx将下面这行代码注释
| eventlog.createeventsource(ev.source, “application”); |
7. 重新启动此项目。
