Как управлять журналами событий с помощью Visual Basic .NET или Visual Basic 2005

Переводы статьи Переводы статьи
Код статьи: 814564 - Vizualiza?i produsele pentru care se aplic? acest articol.
Версия данной статьи для Microsoft Visual C# .NET:815314.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описывается доступ и настраивать журнал событий Windows с помощью платформы Microsoft .NET Framework. Вы можете взаимодействовать с журналами событий Windows с помощьюEventlogКласс:. Чтобы снять с данного каталога атрибут «Только чтение», можно воспользоваться командойEventlogкласс, выполните следующие действия:
  • Чтение из существующего журнала.
  • Добавлять записи в журнале событий.
  • Создавать или удалять источники событий.
  • Удалите журналы.
  • Отвечать на записи журнала.
В данной статье также описываются способы создания журналов во время создания источника событий.


Требования


В приведенном ниже списке перечислены рекомендованные оборудование, программное обеспечение, сетевая инфраструктура, а также необходимые пакеты обновления::
  • Microsoft .NET Framework
  • Microsoft Visual Basic .NET или Microsoft Visual Basic 2005

При написании статьи предполагалось, что пользователь обладает достаточными знаниями в указанных ниже областях.:
  • Microsoft Visual Basic .NET или Microsoft Visual Basic 2005 синтаксис
  • Microsoft Visual Studio .NET или среды Microsoft Visual Studio 2005
  • Ошибка при обработке в .NET Framework

Поиск существующих журналов на компьютере


Существующие журналы можно найти на компьютере с помощьюGetEventLogsобщий методEventlogКласс:. надписьюGetEventLogsметод выполняет поиск всех журналов событий на локальном компьютере, а затем он создает массивEventlogобъекты, содержащих список. В следующем примере кода извлекается список журналов на локальном компьютере и затем отображает имена всех журналов в окне консоли:
      Dim remoteEventLogs() As EventLog

      'Gets logs on the local machine, give remote machine name to get the logs on the remote machine
      remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName)

      Console.WriteLine("Number of logs on computer: " & remoteEventLogs.Length)

      'Display the list of event logs
      Dim log As EventLog
      For Each log In remoteEventLogs
         Console.WriteLine("Log: " & log.Log)
      Next log

Чтение и запись журналов в и из локальной и удаленной системы


Чтение журнала


Для чтения журнала событий, с помощьюОперацииСвойствоEventlogКласс:. надписьюОперацииСвойствоEventlogкласс представляет собой список всех записей в журнале событий. В следующем примере кода показано, как итерации данной коллекции и как прочитать все записи журнала:
      ' Log type can be Application, Security, System or any other custom log
      ' Select the log type you want to read
      Dim logtype As String = "Application"

      ' In the constructor of the eventlog, pass the log type and the computer name 
      ' from which you want to read the logs 
      Dim evtLog As New EventLog(logtype, System.Environment.MachineName)

      Dim lastlogtoshow As Integer = evtLog.Entries.Count
      If lastlogtoshow <= 0 Then
         Console.WriteLine("There are no event logs in the log : " & logtype)
         Exit Sub
      End If

      ' Read the last record in the specified log 
      Dim currentEntry As EventLogEntry
      Dim i As Integer
      ' Show Last 2 entries. You can similarly write the log to a file.
      For i = evtLog.Entries.Count - 1 To lastlogtoshow - 2 Step -1
         currentEntry = evtLog.Entries(i)
         Console.WriteLine("Event Id is : " & currentEntry.EventID)
         Console.WriteLine("Entry type is : " & currentEntry.EntryType.ToString())
         Console.WriteLine("Message is :  " & currentEntry.Message & vbCrLf)
      Next
      evtLog.Close()

Запись журналов


Для записи журнала событий используетсяWriteEntryметодEventlogКласс:. Успешно выполнять запись в журнал событий, убедитесь, что приложение имеет доступ на запись в журнал, который он записывает. Для получения дополнительных сведений о разрешениях, необходимых для чтения и записи в журналы событий посетите следующий веб-узел корпорации Майкрософт.

Безопасности Ramification из журналы событий
.aspx HTTP://msdn2.Microsoft.com/en-us/library/4xz6w79h (vs.71)
Необходимо установитьИсточник:свойства вEventlogэкземпляр компонента, прежде чем добавлять записи в журнал. Когда запись компонента, система автоматически проверяет указанный источник зарегистрирован компонент записи журнала событий. Система вызываетCreateEventSourceПри необходимости. Для записи журнала событий, необходимо передать имя компьютера где находится этот журнал. В следующем примере кодаmachinenameСвойствоСредакласс определяет имя локального компьютера:
      
  ' Check if the source exists 
      If Not EventLog.SourceExists("MySystemSource", System.Environment.MachineName) Then
         EventLog.CreateEventSource("MySystemSource", "System", System.Environment.MachineName)
      End If

      Dim evtLog As New EventLog("System", System.Environment.MachineName, "MySystemSource")

      'writing to system log, in the similar way you can write to other 
      'logs for which you have appropriate permissions to write
      evtLog.WriteEntry("warning is written to system log", EventLogEntryType.Warning, CInt(10001))
      Console.WriteLine("Log written to the system log.")
      evtLog.Close()

Очистка журналов


При заполнении журнала событий запись новых сведений о событиях прекращается либо начинается перезаписать предыдущие записи. Останавливает запись событий, можно очистить журнал от существующих записей и разрешить его, чтобы снова начать запись событий. Для удаления записей из журнала событий, необходимо иметь права администратора для компьютера, который находится в этот журнал. ВызовОчисткаметодEventlogэкземпляр компонента.

В следующем примере domonstrates Очистка журнала:
      ' Create an EventLog instance and pass log name and MachineName on which the log resides
      Dim evtLog As New EventLog("Security", System.Environment.MachineName)
      evtLog.Clear()
      evtLog.Close()

Создание и удаление пользовательских журналов

Создать пользовательский журнал

Если данный пользователь является членом домена, то при вводе имени пользователя используйте форматCreateEventSourceметод, чтобы создать собственный пользовательский обработчик событий. До создания журнала событий с помощьюSourceExistsметод, чтобы убедиться, что источник используется еще не существует и вызоваCreateEventSource. При попытке создания журнала событий, уже существуетSystem.ArgumentException:возникает ошибка.

В следующем примере кода показано, как создать пользовательский журнал событий:
      ' Check if the log already exist
      If Not EventLog.SourceExists("MyOldSource", System.Environment.MachineName) Then
         ' Creating a new log
         EventLog.CreateEventSource("MyOldSource", "MyNewLog", System.Environment.MachineName)
         Console.WriteLine("New event log created successfully.")
      End If

Удаление пользовательского журнала

Если данный пользователь является членом домена, то при вводе имени пользователя используйте форматDeleteметодEventlogкласс, чтобы удалить журнал событий. Более одного источника могут записать в журнал событий. Таким образом перед удалением пользовательского журнала убедитесь, что нет других источников, запись в журнал событий.

В следующем примере кода демонстрируется удаление пользовательского журнала.
      Dim logName As String = "MyNewLog"

      If EventLog.SourceExists("MyOldSource", System.Environment.MachineName) Then
         logName = EventLog.LogNameFromSourceName("MyOldSource", System.Environment.MachineName)
         EventLog.DeleteEventSource("MyOldSource", System.Environment.MachineName)
         EventLog.Delete(logName, System.Environment.MachineName)

         Console.WriteLine(logName & " deleted.")
      End If

Получение событий уведомления

При записи какого-либо журнала, могут получать уведомления о событии. Чтобы сделать это, реализацияEntryWrittenобработчик для событияEventlogЭкземпляр:. Кроме того, значениеEnableRaisingEventsСвойствоTrue.

В следующем примере кода показано, как получать уведомления о событиях:
      If Not EventLog1.SourceExists("MySource", System.Environment.MachineName) Then
         EventLog1.CreateEventSource("MySource", "Application", System.Environment.MachineName)
         Console.WriteLine("CreatingEventSource")
      End If

      'Enable EnableRaisingEvents to true
      EventLog1.Log = "Application"
						EventLog1.EnableRaisingEvents = True
      EventLog1.WriteEntry("MySource", "EntryWritten event is fired", EventLogEntryType.Information)
   End Sub
Примечание.Уведомления о событиях можно получать, только при записи на локальном компьютере. Не удается получить уведомления для операций записи на удаленных компьютерах.


Полный листинг кода

Imports System.Diagnostics
Imports System.Security
Imports System.ComponentModel
Imports System.IO

Public Class Form1
   Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

   Public Sub New()
      MyBase.New()

      'The Windows Form Designer requires this call.
      InitializeComponent()

      'Add any initialization after the InitializeComponent() call

   End Sub

   'Form overrides dispose to clean up the component list.
   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
      If disposing Then
         If Not (components Is Nothing) Then
            components.Dispose()
         End If
      End If
      MyBase.Dispose(disposing)
   End Sub

   'Required by the Windows Form Designer
   Private components As System.ComponentModel.IContainer

   'NOTE: The Windows Form Designer requires the following procedure
   'It can be modified using the Windows Form Designer.  
   'Do not modify it using the code editor.
   Friend WithEvents EventLog1 As System.Diagnostics.EventLog
   Friend WithEvents btnListLog As System.Windows.Forms.Button
   Friend WithEvents btnReadLog As System.Windows.Forms.Button
   Friend WithEvents btnWriteLog As System.Windows.Forms.Button
   Friend WithEvents btnClearLog As System.Windows.Forms.Button
   Friend WithEvents btnCreateLog As System.Windows.Forms.Button
   Friend WithEvents btnDeleteLog As System.Windows.Forms.Button
   Friend WithEvents btnRecNotice As System.Windows.Forms.Button
   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
      Me.btnReadLog = New System.Windows.Forms.Button()
      Me.btnWriteLog = New System.Windows.Forms.Button()
      Me.btnClearLog = New System.Windows.Forms.Button()
      Me.btnCreateLog = New System.Windows.Forms.Button()
      Me.btnDeleteLog = New System.Windows.Forms.Button()
      Me.btnRecNotice = New System.Windows.Forms.Button()
      Me.EventLog1 = New System.Diagnostics.EventLog()
      Me.btnListLog = New System.Windows.Forms.Button()
      CType(Me.EventLog1, System.ComponentModel.ISupportInitialize).BeginInit()
      Me.SuspendLayout()
      '
      'btnReadLog
      '
      Me.btnReadLog.Location = New System.Drawing.Point(48, 54)
      Me.btnReadLog.Name = "btnReadLog"
      Me.btnReadLog.Size = New System.Drawing.Size(152, 24)
      Me.btnReadLog.TabIndex = 0
      Me.btnReadLog.Text = "Read Event Logs"
      '
      'btnWriteLog
      '
      Me.btnWriteLog.Location = New System.Drawing.Point(48, 86)
      Me.btnWriteLog.Name = "btnWriteLog"
      Me.btnWriteLog.Size = New System.Drawing.Size(152, 24)
      Me.btnWriteLog.TabIndex = 1
      Me.btnWriteLog.Text = "Write Event Logs"
      '
      'btnClearLog
      '
      Me.btnClearLog.Location = New System.Drawing.Point(48, 118)
      Me.btnClearLog.Name = "btnClearLog"
      Me.btnClearLog.Size = New System.Drawing.Size(152, 24)
      Me.btnClearLog.TabIndex = 2
      Me.btnClearLog.Text = "Clear Logs"
      '
      'btnCreateLog
      '
      Me.btnCreateLog.Location = New System.Drawing.Point(48, 150)
      Me.btnCreateLog.Name = "btnCreateLog"
      Me.btnCreateLog.Size = New System.Drawing.Size(152, 24)
      Me.btnCreateLog.TabIndex = 3
      Me.btnCreateLog.Text = "Create Custom Log"
      '
      'btnDeleteLog
      '
      Me.btnDeleteLog.Location = New System.Drawing.Point(48, 182)
      Me.btnDeleteLog.Name = "btnDeleteLog"
      Me.btnDeleteLog.Size = New System.Drawing.Size(152, 24)
      Me.btnDeleteLog.TabIndex = 4
      Me.btnDeleteLog.Text = "Delete Custom Log"
      '
      'btnRecNotice
      '
      Me.btnRecNotice.Location = New System.Drawing.Point(48, 214)
      Me.btnRecNotice.Name = "btnRecNotice"
      Me.btnRecNotice.Size = New System.Drawing.Size(152, 24)
      Me.btnRecNotice.TabIndex = 5
      Me.btnRecNotice.Text = "Receive Event Notifications"
      '
      'EventLog1
      '
      Me.EventLog1.EnableRaisingEvents = True
      Me.EventLog1.Log = "Application"
      Me.EventLog1.MachineName = System.Environment.MachineName
      Me.EventLog1.SynchronizingObject = Me
      '
      'btnListLog
      '
      Me.btnListLog.Location = New System.Drawing.Point(48, 22)
      Me.btnListLog.Name = "btnListLog"
      Me.btnListLog.Size = New System.Drawing.Size(152, 24)
      Me.btnListLog.TabIndex = 6
      Me.btnListLog.Text = "List Event Logs"
      '
      'Form1
      '
      Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
      Me.ClientSize = New System.Drawing.Size(256, 266)
      Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.btnListLog, Me.btnRecNotice, Me.btnDeleteLog, Me.btnCreateLog, Me.btnClearLog, Me.btnWriteLog, Me.btnReadLog})
      Me.Name = "Form1"
      Me.Text = "Form1"
      CType(Me.EventLog1, System.ComponentModel.ISupportInitialize).EndInit()
      Me.ResumeLayout(False)

   End Sub

#End Region

   Private Sub btnReadLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReadLog.Click

      'logType can be Application, Security, System or any other Custom Log
      Dim logType As String = "Application"


      'In this case the EventLog constructor is passed a string variable for the log name and 
      'second argument mention the computer name from which you want to read the logs 
      'that you have appropriate permissions for
      Dim ev As New EventLog(logType, System.Environment.MachineName)

      Dim LastLogToShow As Integer = ev.Entries.Count
      If LastLogToShow <= 0 Then
         Console.WriteLine("No Event Logs in the Log :" & logType)
         Exit Sub
      End If

      ' read the last 2 records in the specified log 
      Dim i As Integer
      For i = ev.Entries.Count - 1 To LastLogToShow - 2 Step -1
         Dim CurrentEntry As EventLogEntry = ev.Entries(i)

         Console.WriteLine("Event ID : " & CurrentEntry.EventID)
         Console.WriteLine("Entry Type : " & CurrentEntry.EntryType.ToString())
         Console.WriteLine("Message :  " & CurrentEntry.Message & vbCrLf)
      Next

      ev.Close()

      ' Similarly, you can loop through all the entries in the log by using
      ' the entries collection, as shown in the following commented code.
      ' For Each entry In ev.Entries

      ' Next
   End Sub

   Private Sub btnWriteLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWriteLog.Click
      ' When writing to an event log, you must pass the machine name where 
      ' the log resides.  Here the MachineName Property of the Environment class 
      ' is used to determine the name of the local machine.  Assuming you have 
      ' the appropriate permissions, it is also easy to write to event logs on 
      ' other machines.

      'Check if the Source exists 
      If Not EventLog.SourceExists("MySystemSource", System.Environment.MachineName) Then
         EventLog.CreateEventSource("MySystemSource", "System", System.Environment.MachineName)
      End If
      Dim ev As New EventLog("System", System.Environment.MachineName, "MySystemSource")

      'Writing to system log, in the similar way you can write to other 
      'logs that you have appropriate permissions to write to
      ev.WriteEntry("Warning is written to system Log", EventLogEntryType.Warning, CInt(10001))
      MessageBox.Show("Warning is written to System Log")
      ev.Close()

   End Sub

   Private Sub btnClearLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClearLog.Click
      ' Create an EventLog instance and pass the log name and MachineName on which the log resides.
      Dim ev As New EventLog("Security", System.Environment.MachineName)
      ev.Clear()
      ev.Close()
   End Sub

   Private Sub btnCreateLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreateLog.Click
      'Create the source, if it does not already exist.
      If Not EventLog.SourceExists("MyOldSource", System.Environment.MachineName) Then
         'Creating a new log
         EventLog.CreateEventSource("MyOldSource", "MyNewLog", System.Environment.MachineName)
         Console.WriteLine("CreatingEventSource")
      End If
   End Sub

   Private Sub btnDeleteLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeleteLog.Click
      Dim logName As String = "MyNewLog"

      If EventLog.SourceExists("MyOldSource", System.Environment.MachineName) Then
         logName = EventLog.LogNameFromSourceName("MyOldSource", System.Environment.MachineName)
         EventLog.DeleteEventSource("MyOldSource", System.Environment.MachineName)
         EventLog.Delete(logName, System.Environment.MachineName)

         Console.WriteLine(logName & " deleted.")
      End If

   End Sub


   Private Sub btnRecNotice_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRecNotice.Click
      ' Create the source if it does not already exist.
      If Not EventLog1.SourceExists("MySource", System.Environment.MachineName) Then
         EventLog1.CreateEventSource("MySource", "Application", System.Environment.MachineName)
         Console.WriteLine("CreatingEventSource")
      End If

      'Enable EnableRaisingEvents to true
      EventLog1.Log = "Application"
						EventLog1.EnableRaisingEvents = True
      EventLog1.WriteEntry("MySource", "EntryWritten event is fired", EventLogEntryType.Information)
   End Sub

   Private Sub EventLog1_EntryWritten(ByVal sender As Object, ByVal e As System.Diagnostics.EntryWrittenEventArgs) Handles EventLog1.EntryWritten
      If e.Entry.Source = "MySource" Then
         Console.WriteLine("Entry written by my app. Message: " & e.Entry.Message)
      End If
   End Sub

   Private Sub btnListLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListLog.Click
      Dim remoteEventLogs() As EventLog
      'Gets logs on the local machine, give remote machine name to get the logs on the remote machine
      remoteEventLogs = EventLog.GetEventLogs(System.Environment.MachineName)

      Console.WriteLine("Number of logs on computer: " & remoteEventLogs.Length)

      Dim log As EventLog
      For Each log In remoteEventLogs
         Console.WriteLine("Log: " & log.Log)
      Next log
   End Sub
End Class

Примечание.Необходимо изменить код в Visual Basic 2005. По умолчанию при создании проекта Windows Forms Visual Basic создает два файла для проекта. Если форма называется Form1, двух файлов, которые представляют собой формы с именем Form1.vb и Form1.Designer.vb. Напишите код в файл Form1.vb. В конструкторе Windows Forms записывает код в файле Form1.Designer.vb. В конструкторе Windows Forms использует ключевое слово partial разделить на два отдельных файла реализации класса Form1. Это предотвращает коду, сгенерированному конструктором с перемежаются текстового блока кода.

Для получения дополнительных сведений о новых улучшений языка Visual Basic 2005 посетите следующий веб-узел Microsoft Developer Network (MSDN):
.aspx HTTP://msdn2.Microsoft.com/en-us/library/ms379584 (vs.80)
Дополнительные сведения о разделяемых классах и в конструкторе Windows Forms посетите веб-узлу MSDN:
http://msdn2.Microsoft.com/en-us/library/ms171843.aspx

Проверка результатов

Чтобы verfiy результаты, выполните следующие действия:
  1. Создайте новое приложение Windows с помощью Visual Basic .NET или Visual Basic 2005.

    По умолчаниюForm1.vbбудет создан.
  2. Замените код вForm1.vbс помощью кода в разделе «Полный список кода» данной статьи.
  3. в менюОтладкавыберите пунктSTART ::для запуска приложения.
  4. Выполнять действия надForm1.vb.
  5. Чтобы проверить результат, откройте обозреватель серверов. Для этого нажмите кнопкуОбозреватель серверовв менюПредставление:меню.
  6. Разверните узелserversузел, а затем разверните узелИмя вашего компьютера.
  7. Из спискаИмя вашего компьютераexpandЖурналы событий.

    Примечание.надписьюserversузел из обозревателя серверов не поддерживается в Visual Basic .NET Academic Edition. Событий Windows можно использовать средство просмотра для просмотра результатов выполнения приложения.
  8. Убедитесь, что все действия, описанные в этой процедуре выполняются с помощью обозревателя серверов.

Ссылки

Дополнительные сведения см. на веб-сайте Майкрософт по следующему адресу::

Класс EventLog
.aspx HTTP://msdn2.Microsoft.com/en-us/library/System.Diagnostics.EventLog (vs.71)

Свойства

Код статьи: 814564 - Последний отзыв: 25 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Ключевые слова: 
kbvs2005swept kbvs2005applies kbeventservice kbnetwork kbmanaged kbprogramming kbeventlog kbhowtomaster kbmt KB814564 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:814564

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com