首页 > 编程 > .NET > 正文

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

2024-07-10 12:54:57
字体:
来源:转载
供稿:网友
  • 网站运营seo文章大全
  • 提供全面的站长运营经验及seo技术!
  • 文包含有关编辑注册表的信息。编辑注册表之前,务必先了解在发生问题时如何还原注册表。有关如何还原注册表的信息,请查看 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" 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" 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. 重新启动此项目。

    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表