none
Получение событий из журнала RRS feed

  • Вопрос

  • Есть задача по отлову определённых событий из журнала. Есть такой код (см. ниже).
    Сервис запускается и работает, но события в журналах не отлавливаются.
    Если включить параметр EnableRaisingEvents = True, то служба перестаёт запускаться, и выдаётся следующаяя ошибка:
    ---------------------------
    Службы
    ---------------------------
    Служба "newservice1403" на "Локальный компьютер" была запущена и затем остановлена.
    Некоторые службы автоматически останавливаются, если они не используются другими службами или программами.
    ---------------------------
    ОК 
    ---------------------------
    Как исправить?

    vb.netВыделить код
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    Imports System.Diagnostics
    Imports System.IO
     
    Public Class Service1
     
        Dim el As New EventLog
     
        Protected Overrides Sub OnStart(ByVal args() As String)
            el.EnableRaisingEvents = True ' <- эта строка не даёт запуститься службе
            AddHandler el.EntryWritten, AddressOf wr
        End Sub
     
        Private Sub wr(ByVal source As Object, ByVal e As EntryWrittenEventArgs)
            Try
                Using fs As New StreamWriter("E:\TMP\serv_log.txt", True)
                    fs.WriteLine(e.Entry.Message)
                End Using
            Catch ex As Exception
     
            End Try
        End Sub
     
        Protected Overrides Sub OnStop()
     
        End Sub
     
    End Class
    22 сентября 2017 г. 11:57

Ответы

  • Вы использовали конструктор по умолчанию, читаем его описание:

    https://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog%28v=vs.110%29.aspx

    Initializes a new instance of the EventLog class. Does not associate the instance with any log.

    Таким образом получаем экземпляр класса который не подключен ни к какому логу. Возможно попытка установить флаг о событиях без подключения к логу кидает исключение что в отсутствии какой либо обработки исключений и проводит к остановке сервиса. Проверьте данную теорию под отладчиком.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    22 сентября 2017 г. 15:12
    Модератор
  • Да, не хватало имени журнала. Нужно было вот так:
        Dim el As EventLog
     
        Protected Overrides Sub OnStart(ByVal args() As String)
            el = new EventLog()
            el.Log = "System"
            AddHandler el.EntryWritten, AddressOf wr
            el.EnableRaisingEvents = True
        End Sub

    22 сентября 2017 г. 15:30

Все ответы

  • Вы использовали конструктор по умолчанию, читаем его описание:

    https://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog%28v=vs.110%29.aspx

    Initializes a new instance of the EventLog class. Does not associate the instance with any log.

    Таким образом получаем экземпляр класса который не подключен ни к какому логу. Возможно попытка установить флаг о событиях без подключения к логу кидает исключение что в отсутствии какой либо обработки исключений и проводит к остановке сервиса. Проверьте данную теорию под отладчиком.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    22 сентября 2017 г. 15:12
    Модератор
  • Да, не хватало имени журнала. Нужно было вот так:
        Dim el As EventLog
     
        Protected Overrides Sub OnStart(ByVal args() As String)
            el = new EventLog()
            el.Log = "System"
            AddHandler el.EntryWritten, AddressOf wr
            el.EnableRaisingEvents = True
        End Sub

    22 сентября 2017 г. 15:30