科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道从 VB6 中访问事件日志

从 VB6 中访问事件日志

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

   简介 Visual Basic 6 可通过“App.LogEvent”写入事件日志。但是,此 API 有许多严格的限制。首先,不能为事件定义来源(在事件查看器中始终显示为“VBRuntime”),而且不能指定事件 ID 或事件类别。

作者:中国IT实验室 来源:中国IT实验室 2007年10月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  
方法

    由于各种原因,您可能希望应用程序能够写入事件日志。当然,应该将任何灾难性错误都记录到事件
日志中,因为此信息以后可以用来诊断问题。您可能经常希望将不适合显示给用户的详细信息写入该事件
日志中。

首先需要选择使用哪个日志。可以从系统事件日志、安全性事件日志或应用程序事件日志中进行选择。
应用程序事件日志几乎总是正确的选择,但是,如果需要,也可以创建自己的自定义事件日志。
事件日志包装中的下列 VB.NET 代码使您能够创建自己的自定义日志:

清单 3:使用 VB.NET 创建自定义事件日志

Public Sub CreateEventSource(ByVal source As String, ByVal logName As String)
If EventLog.SourceExists(source) Then
EventLog.DeleteEventSource(source)
End If
EventLog.CreateEventSource(source, logName)
End Sub

您可以看到,使用 .NET Framework 可以轻松创建事件日志。.NET CreateEventSource
方法帮您完成了所有工作。此方法只提供了该功能,以便可以从 VB6 中轻松调用。

清单 4:使用包装类从 VB6 创建事件日志

Dim eventLog As NetFrameworkWrappers.EventLogWrapper
Set eventLog = New NetFrameworkWrappers.EventLogWrapper
eventLog.CreateEventSource "MyApplication", "MyCustomLog" 

向事件日志写入条目同样很简单。WriteEntry VB.NET 方法可以实现该事件日志功能并提供该功能,
以便可以从 VB6 中调用该方法:

清单 5:在 VB.NET 中向事件日志写入条目

Public Sub WriteEntry(ByVal source As String, _
ByVal message As String, _
Optional ByVal type As String = "Information", _
Optional ByVal eventID As Integer = 0, _
Optional ByVal category As Short = 0)
Dim typeEnum As EventLogEntryType = _
System.Enum.Parse(GetType(EventLogEntryType), type)
m_eventLog.WriteEntry(source, message, typeEnum, eventID, category)
End Sub

此包装方法提供了许多可选参数,因此从 VB6 中调用该方法时,您可以仅传递事件日志来源和消息,
也可以传递消息类型、事件 ID 和/或事件类别。

可以使用下列代码从 VB6 中调用此方法:

清单 6:在 VB6 中写入事件日志条目

Dim eventLog As NetFrameworkWrappers.EventLogWrapper
Set eventLog = New NetFrameworkWrappers.EventLogWrapper
eventLog.WriteEntry cboLog.Text, txtMessage, cboType.Text, _
txtID, txtCategory
读取日志

从事件日志中读取信息只是稍微有些复杂。.NET Framework EventLog 类有一个 GetEntries 方法,
它可以返回给定(应用程序、系统等)事件日志的所有日志条目。
问题是每个条目都是作为 EventLogEntry 对象返回的,不能将它们直接传递回 VB6。
但是,我可以简单地创建自己的 EventLogEntryInfo 类,用于将每个事件日志条目复制到其中。
它是一个完整的 COM 类,可以返回到 VB6,并且提供了条目来源、消息、类型、ID 和类别属性。
然后,VB.NET 代码将使用事件日志条目数据填充这些属性,并将其返回,以便可以从 VB6 中使用。

清单 7:在 VB.NET 中读取并转换事件日志条目:

Public Sub GetEntries(ByRef entries() As EventLogEntryInfo)
ReDim entries(m_eventLog.Entries.Count - 1)
For i As Integer = 0 To m_eventLog.Entries.Count - 1
Dim ent As EventLogEntry = m_eventLog.Entries(i)
entries(i) = New EventLogEntryInfo
entries(i).Category = ent.CategoryNumber
entries(i).Message = ent.Message
entries(i).Source = ent.Source
entries(i).EventID = ent.EventID
entries(i).EntryType = ent.EntryType
Next
End Sub

完成此函数后,VB6 便可以完全访问事件日志条目了。

清单 8:在 VB6 中获取事件日志条目

Dim eventLog As NetFrameworkWrappers.EventLogWrapper
Set eventLog = New NetFrameworkWrappers.EventLogWrapper
eventLog.Init logName
Dim entries() As NetFrameworkWrappers.EventLogEntryInfo
eventLog.GetEntries entries
结论

我相信您不需要重写现有的 VB6 应用程序便可利用 .NET F ramework 提供的扩展功能。
正如 VB Fusion 系列文章中所说的,使用这些简单的包装类,便可以通过 COM 对象提供
.NET Framework 的功能,该 COM 对象可以用于 VB6、VBA、ASP 或可以访问 COM 对象的任何环境。
在本文中,您看到了如何将功能丰富的事件日志功能添加到现有的 VB6 应用程序中。
欢迎下载相关的示例代码以便将事件日志添加到现在的应用程序中。

Scott Swigart - 传记

Scott Swigart 从事合并技术和聚合技术的咨询、写作和讲解工作。
Scott 在其职业生涯中涉及的技术范围很广,在 12 岁开始 Commodore 64 编程工作,用 C++ 语言为
UNIX 系统编写硬件诊断,建立 Windows 桌面和 Web 应用程序。在这些年里,Scott 涉及了组件开发、
XML 技术、.NET、Web 服务以及其他语言、平台和模式。由于他的这些经历,Scott 已经体会到技术是
如何随着时间而不断发展进步的。他致力于帮助组织从当今的技术中获得最大利益,同时为明天的技术做准备
。Scott 还是 Microsoft MVP,并且是许多书籍和文章的合著者。
Scott 的联系方式:scott@swigartconsulting.com。

转到原英文页面

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章