.net - 如何在 Windows .NET 服务中进行错误处理

标签 .net windows-services

这感觉像是一个以前可能被问过的问题,但我找不到它所以我问(可能再次)。

我正在编写一个 Windows 服务来进行一些文件监视和处理。这一切都在做我想做的,但我知道在对文件系统或事件日志进行读/写时,我的代码可能会在几个地方抛出错误。我打算在我预计会出现错误的地方放入一些 try/catch,但我想做一些全局错误处理来解决所有这些不可预见的问题。不过,我不确定该怎么做。

我的第一个想法是寻找某种类似于我在 ASP.NET 项目中找到的全局错误处理程序,但在这些方面找不到任何东西。

另一个想法是,我可以获取所有顶级函数调用,然后在它们周围放置一个 try/catch。正如我所见,这意味着在我所有的事件处理程序代码和我的服务启动和停止方法周围放置一个 try/catch。这感觉不是一个好方法,所以我想我可能以错误的方式处理这个问题。有人可以建议我在错误处理方面应该做什么吗?

我假设在服务中我不希望它只是抛出错误,因为它可能会停止服务,或者我实际上应该让服务崩溃并通过我提到的恢复机制自动重新启动它?

我在这里非常不确定,所以请与我分享您的智慧...:)

最佳答案

在服务的 main 方法中放置一个 try/catch 并记录错误以便修复它们是没有问题的。如果捕获到的错误是意外的,那么您可以干净地关闭该服务。

此外,除了主要的 try/catch 之外,您还必须为每个无法避免发生的潜在异常(即网络问题)添加一个 try/catch,以便您可以采取相应的措施来恢复正确的行为应用程序,避免服务崩溃。

最后,请记住,您必须为您拥有的每个不同线程的每个顶级方法执行此操作,因为异常不会传播到线程范围之外。

关于.net - 如何在 Windows .NET 服务中进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229611/

相关文章:

c# - ConfigurationManager.GetSection(sectionName) 在执行单元测试时返回 null

c# - 当您知道无效证书是安全的时,测试 X509Certificate.Thumbprint 属性是否安全?

c# - 我如何根据**货币符号**(如欧元(€)等)将 123456789 转换为 1.234.567,89?

delphi - 从服务运行应用程序,CreateProcessAsUser 失败

windows - SCardEstablishContext 作为服务挂起

Delphi 服务监听 TCP 或 UDP

c# - AutoResetEvent.Set() 是做什么的?

C# 编译器 :/nostdlib option

c++ - 作为 Windows 服务运行时,如何获取事件监视器的数量? C++

c# - 如何调试自定义 Windows 服务的安装?