找出终止c#windows服务的错误的最佳方法是什么?

找出终止c#windows服务的错误的最佳方法是什么?,c#,debugging,windows-services,C#,Debugging,Windows Services,我的c#windows服务正在消亡,因为它创建的一个工作线程中存在一个未知错误 有没有办法找出导致服务终止的异常 (不用写十几个try/catch/log错误代码) 只需对导致服务关闭的错误进行简单的一次性报告。您可以做几件事。首先,如果您还没有查看Windows错误日志,请查看这些日志-我知道这可能是显而易见的,而且它们可能对信息有点了解,但它总是值得一看,因为有时它会有所帮助 第二种方法只是稍微复杂一点,我知道你要求一些非常快速和一次性的方法,但老实说,我将推荐开发Windows服务的最佳方

我的c#windows服务正在消亡,因为它创建的一个工作线程中存在一个未知错误

有没有办法找出导致服务终止的异常

(不用写十几个try/catch/log错误代码)


只需对导致服务关闭的错误进行简单的一次性报告。

您可以做几件事。首先,如果您还没有查看Windows错误日志,请查看这些日志-我知道这可能是显而易见的,而且它们可能对信息有点了解,但它总是值得一看,因为有时它会有所帮助

第二种方法只是稍微复杂一点,我知道你要求一些非常快速和一次性的方法,但老实说,我将推荐开发Windows服务的最佳方法,一旦你做到了,你就再也不会回去了。。。而且它可以帮你省去几个小时的痛苦,所以我还是给你一些建议:

提取服务的核心以在简单的控制台应用程序主机中独立运行。这种方法意味着您可以在VisualStudio中以普通的旧可执行文件的形式完全运行和调试它,甚至可以在连接了远程调试会话的测试服务器上运行和调试它。对于真正的“live”windows服务,您的服务代码是围绕可测试、可调试的服务核心的薄包装。这对我一次又一次奏效

核心服务将公开可由Windows服务主机在生产中调用的Start()和Stop()方法。就这样


有一个非常好的OSS项目,名为try,它提供了一个功能齐全且经过良好测试的包装器版本,您可以阅读开发人员在使用它时的示例。

我想说,添加十几个
try
catch
可能会很有用,以便下次出现问题时,您将有一个错误日志(如果您以后发现问题只在不清楚的情况下发生,调试时很难重现,则此日志尤其有用)


但是,除此之外,您还可以将VisualStudio附加到正在运行的进程,如MSDN文章所示。为了避免这样做,我通常会在服务的启动中添加一些代码,这样,如果exe是使用
-c
命令行参数启动的,那么它将作为可以从Visual Studio启动的正常进程运行。这显示了与此类似的内容。

简单的方法是将错误从VS传输到windows错误日志并在那里进行检查。如果您希望将错误日志列表作为报告,则必须使用一些第三方工具。


如果你喜欢更简单/便宜的,试试上面的代码。它比你想象的要简单得多

它很简单,为AppDomain.CurrentDomain.UnhandledException实现一个事件处理程序,并记录e.ExceptionObject.ToString()的值。

谢谢。我会查一下你的链接谢谢。我会立即采取行动。