Ниже приведен обычный контент Program.cs для служебной программы Windows:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService()
};
ServiceBase.Run(ServicesToRun);
}
}
Это плохая практика заключать ServiceBase.Run(...)
в блок try-catch?
Спасибо.
EDIT:
Выполнены некоторые тесты и найдено (метод теста: отправить пользовательскую команду службе, которая вызывает исключение ApplicationException в переопределении OnCustomCommand):
A. Включение ServiceBase.Run () в try / catch не перехватывает исключение, генерируемое в OnCustomCommand, поскольку блок try уже находился в области действия, когда поток службы начал выполняться. Следовательно, ставить под сомнение суть этого метода не имеет значения, если он в любом случае не выполняет своего предназначения.
B. Добавление обработчика для AppDomain.CurrentDomain.UnhandledException также не перехватило исключение.
Однако в обоих случаях исключение обнаружилось в журнале событий Windows. Это в значительной степени решает мою необходимость знать, когда происходит сбой во время выполнения службы, но остается вопрос: есть ли случаи, когда служба может молча аварийно завершить работу без какого-либо следа в журнале событий?