C# 如何从失败的Windows服务中获取.NET异常消息和堆栈跟踪?

C# 如何从失败的Windows服务中获取.NET异常消息和堆栈跟踪?,c#,.net,debugging,windows-services,C#,.net,Debugging,Windows Services,我已经用C#/.NET编写了一个Windows服务,但到目前为止还没有启动。Exception在其OnStart方法中抛出 由于我在Windows事件日志中没有找到有关未处理异常的任何信息(除了一个没有太大帮助的P4:System.Data),我正在寻找另一种获取堆栈跟踪和异常消息的简单方法 我知道,我可以尝试使用Windows服务,但由于在a下运行的OnStart方法失败,因此调试并不有趣。此外,它还需要以管理员身份启动VS 或者我应该将所有内容都包装在一个try-catch中,并将异常记录在

我已经用C#/.NET编写了一个Windows服务,但到目前为止还没有启动。Exception在其
OnStart
方法中抛出

由于我在Windows事件日志中没有找到有关未处理异常的任何信息(除了一个没有太大帮助的
P4:System.Data
),我正在寻找另一种获取堆栈跟踪和异常消息的简单方法

我知道,我可以尝试使用Windows服务,但由于在a下运行的
OnStart
方法失败,因此调试并不有趣。此外,它还需要以管理员身份启动VS


或者我应该将所有内容都包装在一个try-catch中,并将异常记录在某个地方?如果是,去哪里?最佳做法是什么?

将代码的所有关键部分包装在单独的try/catch块中,将日志写入windows事件日志,安装全局异常处理程序。也将这些异常写入windows事件日志


即使服务不会崩溃,您也应该在服务中执行所有这些操作。

请参阅如何执行。为什么要安装全局异常处理程序并使用try/catch块?我只需执行AppDomain.CurrentDomain.UnhandledException+=…EventLog.WriteEntry…。似乎这就足够了。您希望尽可能多地记录有关每个异常的信息。这就是为什么您有本地try/catch块,可以在其中添加有关程序状态的更多信息。您希望全局捕获异常,因为总是有机会获取未提供try/catch块的异常。底线:将尽可能多的详细信息写入事件日志。这将最大限度地减少您调试服务并使其以稳定方式运行所需的时间。听起来有点像计数器,因为我不知道要向未处理的异常添加哪些信息。但我大体上明白你的意思。好吧,主要目标是找到你的服务快速崩溃的原因(不仅是今天,而且是未来的几个月和几年)。因此,我在您的服务的顶层有两到三个try/catch块来生成有意义的日志条目(如前所述)