如果我选择在EventLog查看器中过滤“应用程序”日志,我可以看到很多源在“应用程序”日志中注册。我怎么能通过C#以编程方式枚举所有这些来源?似乎我无法使用“应用程序”和“系统”日志注册我自己的evento源,为什么?
BTW:“事件来源”的概念确实令人困惑......答案 0 :(得分:3)
可能有一个更合适的.NET或Windows API可供您参考,但信息最终存储在Eventlog服务密钥下的注册表中。服务的根密钥在这里:
HKLM\SYSTEM\CurrentControlSet\Services\Eventlog
该密钥下的大多数子密钥将是系统上的各种事件日志,包括System
和Application
。对于每个日志,它将包含一组附加子键,这些子键表示该日志的已注册源。所以只需枚举子键即可获得列表。
在XP / 2003操作系统上,日志的子项还包含一个名为Sources
的REG_MULTI_SZ值,该值应与源子项列表匹配。该值似乎不再用于Win7 / 2008 R2计算机(不确定Vista)。
答案 1 :(得分:1)
这是一个用于枚举源代码的代码片段。
注意:
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
Imports System.Diagnostics
Imports Microsoft.Win32
Public Class ClsEventSources
Friend Class MySourcesInfo
Friend LogName As String
Friend SourceName As String
End Class
Private MyEventLogList As New List(Of EventLog)
Private MySourceList As New List(Of MySourcesInfo)
Private Const RegEventLogPath As String = "SYSTEM\CurrentControlSet\Services\Eventlog\"
Private Sub New()
MyEventLogList = EventLog.GetEventLogs.ToList
For Each Ev In MyEventLogList
For Each SubKeyName In _
Registry.LocalMachine.OpenSubKey(RegEventLogPath & _
Ev.Log).GetSubKeyNames
MySourceList.Add(New MySourcesInfo With _
{.LogName = Ev.Log, .SourceName = SubKeyName})
Next
Next
End Sub
End Class
答案 2 :(得分:0)
查看System.Diagnostics.EventLog类的文档,该类应该显示所有内容。