Обработчик UnhandledException в.Net Windows Service

Если ответ @ Maleki не работает для вас, проверьте и посмотрите, есть ли файл .editorconfig в папке проекта.

Например, Угловой CLI генерирует один с новым проектом, который выглядит например

# Editor configuration, see http://editorconfig.org
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
max_line_length = off
trim_trailing_whitespace = false

Здесь требуется изменить indent_size, так как кажется, что он переопределит что-либо в вашем рабочем пространстве .vscode или пользовательских настройках.

25
задан Diego C Nascimento 1 October 2013 в 04:43
поделиться

2 ответа

Хорошо, I’ve, сделанный немного больше исследования этого теперь. При создании сервиса окон в.Net Вы создаете класс, который наследовался Системе. ServiceProcess. ServiceBase (В VB это скрыто в.Designer.vb файле). Вы тогда переопределяете функцию OnStart и OnStop, и OnPause и OnContinue, если Вы принимаете решение. Эти методы вызываются из базового класса, таким образом, я сделал немного ввода по абсолютному адресу вокруг с отражателем. OnStart вызывается методом в Системе. ServiceProcess. ServiceBase по имени ServiceQueuedMainCallback. Версия на моей машине "Система. ServiceProcess, Version=2.0.0.0" декомпилируется как это:


Private Sub ServiceQueuedMainCallback(ByVal state As Object)
    Dim args As String() = DirectCast(state, String())
    Try 
        Me.OnStart(args)
        Me.WriteEventLogEntry(Res.GetString("StartSuccessful"))
        Me.status.checkPoint = 0
        Me.status.waitHint = 0
        Me.status.currentState = 4
    Catch exception As Exception
        Me.WriteEventLogEntry(Res.GetString("StartFailed", New Object() { exception.ToString }), EventLogEntryType.Error)
        Me.status.currentState = 1
    Catch obj1 As Object
        Me.WriteEventLogEntry(Res.GetString("StartFailed", New Object() { String.Empty }), EventLogEntryType.Error)
        Me.status.currentState = 1
    End Try
    Me.startCompletedSignal.Set
End Sub

Поэтому, потому что Я. OnStart (args) называют из части Попытки блока Выгоды Попытки, я предполагаю, что что-либо, что происходит в рамках метода OnStart, эффективно обертывается тем блоком Выгоды Попытки и поэтому любыми исключениями, которые происходят, не технически не обработаны, поскольку они на самом деле обрабатываются в Выгоде Попытки ServiceQueuedMainCallback. Так CurrentDomain. UnhandledException никогда на самом деле происходит, по крайней мере, во время стандартной программы запуска. Другие 3 точки входа (OnStop, OnPause и OnContinue) все называют от базового класса похожим способом.

Так я ‘think’, который объясняет, почему мой компонент Обработки исключений can’t ловит UnhandledException на Запуске и Остановке, но I’m, не уверенный, если это объясняет, почему таймеры, которые являются установкой в OnStart can’t, вызывают UnhandledException, когда они стреляют.

15
ответ дан Scott 28 November 2019 в 21:56
поделиться

Можно подписаться на AppDomain. Событие UnhandledException. Если у Вас есть цикл сообщения, можно связать с Приложение. Событие .

ThreadException
2
ответ дан Garo Yeriazarian 28 November 2019 в 21:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: