Хорошо, я немного больше изучил это сейчас.
Когда вы создаете службу Windows в .Net, вы создаете класс, который наследуется от System.ServiceProcess.ServiceBase (в VB это скрыто в файле .Designer.vb). Затем вы переопределяете функции OnStart и OnStop, а также OnPause и OnContinue, если хотите.
Эти методы вызываются из базового класса, поэтому я немного возился с рефлектором.
OnStart вызывается методом в System.ServiceProcess.ServiceBase, который называется ServiceQueuedMainCallback. Версия на моей машине "System.ServiceProcess, версия = 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
Таким образом, поскольку Me.OnStart (args) вызывается из части Try блока Try Catch, я предполагаю, что все, что происходит в методе OnStart, эффективно упаковывается этим блоком Try Catch, и поэтому любые возникающие исключения не являются технически необработанные, так как они на самом деле обрабатываются в Service CueuedMainCallback Try Catch. Таким образом, CurrentDomain.UnhandledException никогда не происходит, по крайней мере, во время процедуры запуска.
Остальные 3 точки входа (OnStop, OnPause и OnContinue) все вызываются из базового класса аналогичным образом.
Поэтому я «думаю», что объясняет, почему мой компонент обработки исключений не может перехватить UnhandledException при запуске и остановке, но я не уверен, объясняет ли это, почему таймеры, настроенные в OnStart, не могут вызвать исключение UnhandledException при их срабатывании ,