在try-catch中包含服务执行:不好的做法?

时间:2010-05-10 08:28:04

标签: c# windows-services try-catch

以下是Windows服务程序的常用Program.cs内容:

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块中是不好的做法?

感谢。


修改

执行了一些测试并发现(测试方法:向服务发送自定义命令,该命令在OnCustomCommand覆盖中抛出ApplicationException):

一个。在try / catch中包含ServiceBase.Run()不会捕获OnCustomCommand中抛出的异常,因为当服务线程开始执行时,try块已经在范围内。因此,质疑这种方法的核心性是无关紧要的,只要它无论如何都没有达到目的。

B中。为AppDomain.CurrentDomain.UnhandledException添加处理程序也没有捕获到异常。

但是,在这两种情况下,Windows事件日志中都出现了异常。这几乎解决了我需要知道在服务执行期间什么时候崩溃但问题仍然存在:是否有任何情况下服务可能会在事件日志中无任何跟踪而无声地崩溃?

1 个答案:

答案 0 :(得分:2)

这取决于你在做什么。如果您打算处理异常并对它们执行有用的操作(例如重试,运行备份,通知用户并请求反馈等),那么IMO我认为这不是一种不好的做法。

正如我所说,这取决于你在做什么。