通过 Active Server Pages (asp)记录事件

本文介绍两种在ActiveServerPages(ASP)中记录事件日志的方法:一是使用VisualBasic或VisualC++创建COM组件;二是利用WindowsScriptHost的Shell对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文演示了两种通过 Active Server Pages (ASP) 向事件日志中写入事件的办法。 ASP 不提供在 Microsoft Windows 事件日志中记录事件的内置机制。 最常见的一种做法是使用 Microsoft Visual Basic 或 Microsoft Visual C++ 创建自定义“组件对象模型”(COM) 组件,这些组件提供向事件日志中写入事件和在 ASP 页中使用组件的方法。 另一种做法是使用“Windows Script Host”的 Shell 对象。

备注: 如果想在 Internet Information Server 日志中追加一些文本,您可以使用 Response.AppendToLog 方法。

要求

  • Microsoft Windows 95、Windows 98、Windows NT 4.0 Server、Windows NT 4.0 Workstation、Windows 2000 Professional、Windows 2000 Server 或 Windows 2000 Advanced Server
  • Microsoft Internet Information Server (IIS) 或 Personal Web Server (PWS)

    如要在运行 Windows 2000 的计算机上安装 IIS 5.0,请从 Windows 开始菜单上,指向设置,再指向控制面板,然后单击添加/删除程序。单击添加/删除 Windows 组件

    在运行 Windows NT 的计算机上,您可以从 Windows NT 4.0 Option Pack 中安装 IIS 4.0 或 PWS。

    在运行 Windows 95 或 Windows 98 的计算机上,您可以从 Windows 95 CD 或 Windows 98 CD 上安装 PWS。

疑难解答说明

  • 在 Windows 2000 上,事件日志记录不能用于从 ASP 中调用的组件。

    默认情况下,从 ASP 页运行的组件是在 IUSR_COMPUTERNAME 这一帐户下创建的。 此帐户是来宾组中的一个成员,而在 Windows 2000 中,向应用程序事件日志中写入事件所需的安全权限已更改。为解决此问题,您必须修改一个注册表项。有关其他信息,请单击下面的文章编号以查看 Microsoft 知识库中的文章:
    251264  PRB: App.Logevent Does Not Work in Components that You Call from ASP on Windows 2000(在 Windows 2000 上,App.Logevent 在从 ASP 中调用的组件中不起作用)
  • 在调用 LogEvent 方法时,您会会收到“权限被拒绝”这一错误消息。

    出现此错误消息的原因在于,应用程序事件日志在默认情况下设置为限制来宾访问,而匿名用户属于来宾组。若要解决此问题,请使用以下任一方法: 警告:“注册表编辑器”使用不当会导致可能需要重新安装操作系统的严重问题。Microsoft 不保证能够解决因“注册表编辑器”使用不当而产生的问题。“注册表编辑器”的使用风险自负。

    有关如何编辑注册表的信息,请查看注册表编辑器 (Regedit.exe) 中的“改变项和值”帮助主题,或 Regedt32.exe 中的“添加和删除注册表中的信息”和“编辑注册表数据”帮助主题。注意,编辑注册表之前,应当先备份注册表。如果您运行的是 Windows NT 或 Windows 2000,还应该更新“紧急修复磁盘”(ERD)。

    • 将下面的注册表项设置由 1 改为 0,然后重启计算机以使更改生效。
      HKLM\System\CurrentControlSet\Services\EventLog\Application
      名称: RestrictGuestAccess
      类型: REG_DWORD
      备注: 这将使所有来宾帐户都能向应用程序事件日志中写入。
    • 从来宾组中删除“匿名”用户。
    • 针对此特定页使用另一个“匿名”用户。
    • 关闭对页面或应用程序的“匿名”访问。

使用 Windows Script Host 的 Shell 来记录事件

通过 ASP 页记录事件的最简单的办法是使用 Windows Script Host 的 Shell。 您可以利用 Shell 对象的 LogEvent 方法来直接向事件日志中写入事件。

此办法的特定要求
此办法要求您安装“Microsoft Windows Script Host”。 您可以从以下 Microsoft Web 站点下载并安装 Windows Script Host 5.1 版:
创建 ASP 页来记录事件
  1. 从 Windows 开始菜单,单击运行,然后键入 notepad 以打开“记事本”。
  2. 选中以下代码,右键单击突出选中的内容,然后单击复制。在“记事本”中,单击编辑菜单上的粘贴
    <%@ Language=VBScript %>
    <HTML>
    <BODY>
    <%
    'Use these Constants to designate the type of Event Log.
    const SUCCESS = 0
    const ERROR = 1
    const WARNING = 2
    const INFORMATION = 4
    const AUDIT_SUCCESS = 8
    const AUDIT_FAILURE = 16
    
    dim WshShell
    set WshShell = Server.CreateObject("WScript.Shell")
    wshshell.Logevent WARNING, "Test Event Log by Windows Script Host!"
    set wshshell=nothing
    Response.write "Event Logged Successfully by Windows Script Host!"
    
    %>
    </BODY>
    </HTML>
  3. 文件菜单上,单击保存
  4. 另存为对话框中,单击保存在文本框中的向下箭头,然后单击您的 PWS 或 IIS Web 服务器的根目录(默认情况下为 C:\InetPub\Wwwroot)。在保存类型下拉列表框中,单击所有文件。 在文件名文本框中,键入 EventLog.asp。最后,单击保存

使用 Visual Basic 组件记录事件

另一种在事件日志中记录事件的办法是创建一个 Visual Basic 组件,它使用 Application 对象的 LogEvent 方法向事件日志中写入事件。 除此方法之外,您还可以使用 LogPath LogMode 属性来指定到自定义日志文件的路径和确定进行日志记录的方式。 如果未设置 LogPath,则 LogEvent 方法就将事件写入 Windows NT LogEvent 文件中。

此办法的特定要求
此办法要求您安装 Visual Basic 6.0。 在此办法中,您需要创建一个 Visual Basic ActiveX DLL 项目,以便创建一个可在您的 ASP 页中使用的 COM 组件。 此 COM 组件包含一个方法,该方法使用 Application 对象的 LogEvent 方法将传入的文本写入事件日志。

您可以从下面的 Microsoft Web 站点下载 Microsoft Visual Studio 的最新版本,它包括了 Visual Basic:
创建 Visual Basic ActiveX DLL 项目
  1. 从 Windows 开始菜单中,指向程序,指向 Microsoft Visual Studio 6.0,然后单击 Microsoft Visual Basic 6.0 以打开 Visual Basic。
  2. 新建项目对话框中,单击 ActiveX DLL,然后单击打开
  3. 项目菜单中,单击项目属性,然后选中无人参与执行保留在内存中复选框。单击确定
  4. 在项目资源管理器中,选择该项目,然后按 F4 键显示该项目的属性。 突出显示当前名称,然后将该项目重命名为 MyEventLog
  5. 在项目资源管理器中,单击 Class1,突出显示当前名称,然后将 Class1 重命名为 EventLog
  6. 选中以下代码,右键单击选中的内容,然后单击复制。 在项目资源管理器中,双击 EventLog,然后按 CTRL+V 组合键将以下代码粘贴到代码编辑器中:
    Function LogEvent(strMessage As String, EventType As Integer) As Boolean
       App.LogEvent strMessage, EventType
    End Function
  7. 将 MyEventLog 项目保存到您选择的文件夹中。
  8. 文件菜单上,单击生成 MyEventLog.dll
  9. 生成项目对话框中,保留 DLL 的名称不变,单击确定。 即会在“Visual Basic 项目”文件夹中创建该 DLL,其名称与您的项目相同。
现在,您必须创建一个 ASP 页,它将使用新创建的 ActiveX DLL 在事件日志中写入文本。

创建 ASP 页来使用 EventLog 对象
  1. 开始菜单单击运行,键入 notepad,然后单击确定以打开“记事本”。
  2. 选中以下代码,右键单击选中的内容,然后单击复制。在“记事本”中,单击编辑菜单上的粘贴以粘贴以下代码:
    <%@ Language=VBScript %>
    <HTML>
    <BODY>
    <%
    Const vbLogEventTypeError = 1  'Error. 
    Const vbLogEventTypeWarning = 2 'Warning. 
    Const vbLogEventTypeInformation = 4 'Information. 
    
    dim myLog
    set myLog = server.CreateObject("MyEventLog.EventLog") 
    myLog.LogEvent "Test Event Log by Visual Basic", vbLogEventTypeWarning
    Response.Write "Event Logged Successfully using Visual Basic Component!"
    
    %>
    </BODY>
    </HTML>
  3. 文件菜单上,单击保存
  4. 另存为对话框中,单击您的 PWS 或 IIS Web 服务器的根目录(默认情况下是 C:\InetPub\Wwwroot)。在保存类型下拉列表框中,单击所有文件。 在文件名文本框中,键入 EventLogVB.asp。最后,单击保存

测试事件日志记录

若要测试事件日志记录,请按照下列步骤操作:
  1. 打开浏览器。 如果您的计算机上安装了 Internet Explorer,则请从开始菜单单击运行,键入 iexplore,然后单击确定
  2. 如要测试使用“Windows Script Host”的事件日志页,请在“地址”栏中键入以下地址,然后按 ENTER 键:
    http://<您计算机的名称>/EventLog.asp
    如要测试使用 Visual Basic 组件的事件日志页,请在“地址”栏中键入以下地址,然后按 ENTER 键:
    http://<您计算机的名称>/EventLogVB.asp
  3. 如果能看到您在 ASP 页中键入的消息,就可以打开事件日志查看器或事件日志文件,看该事件是否已记录在日志中。
我的事件日志在何处?
  • 在基于 Windows 2000 或 Windows NT 的系统中,您可以使用事件查看器来阅读事件日志。 若要打开事件查看器,请从开始菜单上指向程序,指向管理工具,然后单击事件查看器。 单击应用程序日志以查看测试事件是否已被记录下来。
  • 如果您使用“Windows Script Host”在 Windows 95、Windows 98 和 Windows Me 计算机上记录事件,则事件将记录到 WSH.log 文件中,此文件位于用户的 Windows 目录下。 WSH.log 文件中包含一个时间戳、事件类型和日志条目的文本。
  • 在使用 Visual Basic 组件在 Windows 95、Windows 98 和 Windows Me 计算机上记录事件的情况下,如果未在 Visual Basic Application 对象的 App.LogPath 属性中指定文件,则事件将记录到 Vbevents 文件中。

疑难解答

  1. App.LogEvent 只能在编译后的应用程序中记录。

    根据设计,当您从 Visual Basic 集成开发环境 (IDE) 运行应用程序时,App.LogEvent 将不工作;它只有在应用程序经过编译后才能工作。有关其他信息,请单击下面的文章编号以查看 Microsoft 知识库中的文章:
    161306  INFO: App.LogEvent Only Logs in Compiled Applications(App.LogEvent 仅能在编译的应用程序中记录)
  2. 您必须提供适当的对 DLL 文件的访问权限。

    对于 Web 使用,您必须向下列帐户授予对 DLL 的文件访问权限:

    • IUSR_计算机名
    • IWAM_计算机名
    • 系统
    • 管理员组

    备注: 如果不使用“匿名”方式访问 Web 站点,则必须向“所有人”组授予对 DLL 和 /WinNT/System32 目录的“读取和执行”访问权限。

参考

有关其他信息,请单击下列文章编号以查看 Microsoft 知识库中的文章:
154576  HOWTO: Write to the Windows NT Event Log from Visual Basic(从 Visual Basic 向 Windows NT 事件日志中写入)
257541  HOWTO: Write to the Windows NT/Windows 2000 System Log by Using the Windows Script Host(使用 Windows Script Host 向 Windows NT/Windows 2000 系统日志中写入)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值