¿Controlador global de excepciones para servicios de Windows?

¿Hay alguna forma de manejar globalmente excepciones para un servicio de Windows? Algo similar a lo siguiente en las aplicaciones de Windows Forms:

Application.ThreadException += new ThreadExceptionEventHandler(new ThreadExceptionHandler().ApplicationThreadException); 

Este es un código bastante sólido que recomendamos a las personas que usen cuando implementan http://exceptioneer.com en sus aplicaciones de Windows.

 namespace YourNamespace { static class Program { [STAThread] static void Main() { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { HandleException(e.Exception); } static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { HandleException((Exception)e.ExceptionObject); } static void HandleException(Exception e) { //Handle your Exception here } } } 

Gracias,

Phil.

Has probado

 AppDomain.CurrentDomain.UnhandledException 

Esto disparará por excepciones no controladas en el dominio dado sin importar en qué hilo se encuentren. Si su servicio de Windows usa múltiples AppDomains, necesitará usar este valor para cada dominio, pero la mayoría no.