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

如何在Windows.NET服务中进行错误处理,.net,windows-services,.net,Windows Services,这感觉像是一个以前可能被问过的问题,但我找不到,所以我要问(可能再次) 我正在编写一个windows服务来进行一些文件监视和处理。这一切都是我想做的,但我知道在对文件系统或事件日志执行读/写操作时,我的代码可能会在几个地方抛出错误。我打算在我预计会出现错误的地方加入一些try/catch,但我想做一些全局错误处理,以解决所有那些不可预见的问题。但我不知道该怎么做 我的第一个想法是寻找某种类似于我在ASP.NET项目中找到的全局错误处理程序,但看不到任何类似的东西 另一个想法是,我可以得到所有顶级

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

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

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

另一个想法是,我可以得到所有顶级函数调用,并对它们进行尝试/捕获。在我看来,这意味着在我的所有事件处理程序代码和服务启动和停止方法周围放置一个try/catch。这感觉不是一个好的方法,所以我想我可能是用错误的方式来处理这个问题。有人能建议我在错误处理方面应该做些什么吗

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


我在这里很不确定,所以请与我分享你的智慧……:)

在服务的主方法中加入try/catch并记录错误,这样您就可以修复它们了。如果捕获到的错误是意外的,则可以完全关闭服务

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


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

多年来,我们在编写的许多Windows服务中都成功地使用了此方法

我们总是在dll中拥有这些功能。在服务中,当我们在dll中实例化并运行函数时,我们将调用包装在try/catch中。然后,服务可以记录或响应抛出的任何不可预见的异常


当然,您应该将可疑代码包装在try/catch块中的dll中,并在那里执行适当的操作。

服务永远不会失败。通常,服务中的内容是由事件(网络呼叫或计时器)触发的。。。为每个事件运行的代码应该在try-catch中,这样服务就不会停止

我建议登录到事件日志中查找错误和其他重要信息。您可以使用+来完成此操作


由于硬盘满或内存问题等硬件问题,服务可能会停止。如果希望它自动重新启动,可以在NT服务选项对话框或安装程序中设置恢复。

因此,如果我理解正确,我们将不会在DLL中设置任何try/catch。。DLL将只抛出引用DLL的项目中捕获的异常/错误。。这是正确的方法吗?我想在DLL本身中包含一个日志机制,然后使用它。这并不是我的初衷。当你知道自己能处理好这种情况时,一定要用Try/Catch。问题是全局try/catch,这可以在服务中完成,因为它在dll中实例化代码。如果您更喜欢dll中的全局try/catch,那么这没有问题,只要您确保可以捕获所有内容。