知识大全 使用.NET从VB6中访问事件日志
Posted 事件
篇首语:天才就是百分之九十九的汗水加百分之一的灵感。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用.NET从VB6中访问事件日志相关的知识,希望对你有一定的参考价值。
使用.NET从VB6中访问事件日志 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
简介
Visual Basic 可通过 App LogEvent 写入事件日志 但是 此 API 有许多严格的限制 首先 不能为事件定义来源(在事件查看器中始终显示为 VBRuntime ) 而且不能指定事件 ID 或事件类别 还限制您只能写入应用程序事件日志 不能创建自己的自定义来源和日志
通过使用 NET Framework 免费提供的类 可以克服所有这些限制 这样可以使您有效地编写应用程序 以便用户 管理员或其他支持人员都可以查看日志来诊断问题
NET Framework EventLog 类
NET Framework 提供了一个强大的 EventLog 类 用它可以轻松地处理事件日志 不过您不能直接从 VB 访问此类 依照 VB Fusion(英文)系列文章中的精神 可以通过创建封装 NET 类的 包装从 VB 中访问此功能
我还创建了一个练习此事件日志功能的示例 VB 应用程序
图 使用事件日志功能的 VB 应用程序
创建包装类时 大部分工作只是将 NET 类型转换为 VB 可以理解的类型 GetEventLogs 方法通常返回一组 EventLog 对象 不过不能直接从 VB 中使用这些 EventLog 对象 但是 下列 VB NET 函数将计算机上的所有事件日志的列表转换为一组字符串 VB 很容易就可以使用这些字符串 通常 您拥有系统事件日志 安全性事件日志和应用程序事件日志 但是某些应用程序还会创建自己的自定义事件日志 而此方法还可以显示这些事件日志
清单 使用 VB NET 列出计算机上的所有事件日志
Public Function GetEventLogs() As String() Dim logs(EventLog GetEventLogs Length ) As String Dim i As Integer = For Each el As EventLog In EventLog GetEventLogs() logs(i) = el Log i += Next Return logs End Function
您可以看到 EventLog 类使您能够通过 GetEventLogs 函数访问所有事件日志 调用此函数后 它就会遍历结果 并将所有事件日志名称转换为一组字符串 然后 可以将此 VB NET 代码作为 对象进行公开 从而允许从 VB 中调用它
从 VB 中调用此代码以及(例如)用结果填充列表框就像下面这样简单
清单 使用 VB 在列表框中显示日志名称
Dim eventLog As NetFrameworkWrappers EventLogWrapper Set eventLog = New NetFrameworkWrappers EventLogWrapper lstEventLogs Clear Dim logs() As String logs = eventLog GetEventLogs Dim log As Variant For Each log In logs lstEventLogs AddItem log Next
方法
由于各种原因 您可能希望应用程序能够写入事件日志 当然 应该将任何灾难性错误都记录到事件日志中 因为此信息以后可以用来诊断问题 您可能经常希望将不适合显示给用户的详细信息写入该事件日志中
首先需要选择使用哪个日志 可以从系统事件日志 安全性事件日志或应用程序事件日志中进行选择 应用程序事件日志几乎总是正确的选择 但是 如果需要 也可以创建自己的自定义事件日志 事件日志包装中的下列 VB NET 代码使您能够创建自己的自定义日志
清单 使用 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 方法帮您完成了所有工作 此方法只提供了该功能 以便可以从 VB 中轻松调用
清单 使用包装类从 VB 创建事件日志
Dim eventLog As NetFrameworkWrappers EventLogWrapper Set eventLog = New NetFrameworkWrappers EventLogWrapper eventLog CreateEventSource MyApplication MyCustomLog
向事件日志写入条目同样很简单 WriteEntry VB NET 方法可以实现该事件日志功能并提供该功能 以便可以从 VB 中调用该方法
清单 在 VB NET 中向事件日志写入条目
Public Sub WriteEntry(ByVal source As String _ ByVal message As String _ Optional ByVal type As String = Information _ Optional ByVal eventID As Integer = _ Optional ByVal category As Short = ) Dim typeEnum As EventLogEntryType = _ System Enum Parse(GetType(EventLogEntryType) type) m_eventLog WriteEntry(source message typeEnum eventID category) End Sub
此包装方法提供了许多可选参数 因此从 VB 中调用该方法时 您可以仅传递事件日志来源和消息 也可以传递消息类型 事件 ID 和/或事件类别
可以使用下列代码从 VB 中调用此方法
清单 在 VB 中写入事件日志条目
Dim eventLog As NetFrameworkWrappers EventLogWrapper Set eventLog = New NetFrameworkWrappers EventLogWrapper eventLog WriteEntry cboLog Text txtMessage cboType Text _ txtID txtCategory
读取日志
从事件日志中读取信息只是稍微有些复杂 NET Framework EventLog 类有一个 GetEntries 方法 它可以返回给定(应用程序 系统等)事件日志的所有日志条目 问题是每个条目都是作为 EventLogEntry 对象返回的 不能将它们直接传递回 VB 但是 我可以简单地创建自己的 EventLogEntryInfo 类 用于将每个事件日志条目复制到其中 它是一个完整的 类 可以返回到 VB 并且提供了条目来源 消息 类型 ID 和类别属性 然后 VB NET 代码将使用事件日志条目数据填充这些属性 并将其返回 以便可以从 VB 中使用
清单 在 VB NET 中读取并转换事件日志条目
Public Sub GetEntries(ByRef entries() As EventLogEntryInfo) ReDim entries(m_eventLog Entries Count ) For i As Integer = To m_eventLog Entries Count 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
完成此函数后 VB 便可以完全访问事件日志条目了
清单 在 VB 中获取事件日志条目
Dim eventLog As NetFrameworkWrappers EventLogWrapper Set eventLog = New NetFrameworkWrappers EventLogWrapper eventLog Init logName Dim entries() As NetFrameworkWrappers EventLogEntryInfo eventLog GetEntries entries
结论
我相信您不需要重写现有的 VB 应用程序便可利用 NET F ramework 提供的扩展功能 正如 VB Fusion 系列文章中所说的 使用这些简单的包装类 便可以通过 对象提供 NET Framework 的功能 该 对象可以用于 VB VBA ASP 或可以访问 对象的任何环境 在本文中 您看到了如何将功能丰富的事件日志功能添加到现有的 VB 应用程序中 欢迎下载相关的示例代码以便将事件日志添加到现在的应用程序中
Scott Swigart 传记
Scott Swigart 从事合并技术和聚合技术的咨询 写作和讲解工作 Scott 在其职业生涯中涉及的技术范围很广 在 岁开始 Commodore 编程工作 用 C++ 语言为 UNIX 系统编写硬件诊断 建立 Windows 桌面和 Web 应用程序 在这些年里 Scott 涉及了组件开发 XML 技术 NET Web 服务以及其他语言 平台和模式 由于他的这些经历 Scott 已经体会到技术是如何随着时间而不断发展进步的 他致力于帮助组织从当今的技术中获得最大利益 同时为明天的技术做准备 Scott 还是 Microsoft MVP 并且是许多书籍和文章的合著者 Scott 的联系方式 scott@s
cha138/Article/program/net/201311/12220相关参考
如何用在ASP.NET中写入事件日志 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文包含有关
知识大全 VB6使用OracleDataControl访问Oracle
VB6使用OracleDataControl访问Oracle 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
知识大全 在 ADO.NET2.0 中对于从您的数据源访问元数据
在ADO.NET2.0中对于从您的数据源访问元数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 从 .NET 应用程序访问 Microsoft Office 数据
从.NET应用程序访问MicrosoftOffice数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
使用PHP实现蜘蛛访问日志统计 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是对使用PHP
在.Net程序中使用log4net记录日志 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! log
从VB6迁移到VB.NET的进展至今仍旧缓慢 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在发布V
知识大全 在.Net Micro Framework中访问硬件
在.NetMicroFramework中访问硬件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Visual Basic.NET中使用ADO访问数据库
VisualBasic.NET中使用ADO访问数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET2.0中数据源控件之异步数据访问 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在