windows服务中的设计和错误处理

Posted

技术标签:

【中文标题】windows服务中的设计和错误处理【英文标题】:Design and Error handling in windows service 【发布时间】:2021-12-05 12:13:21 【问题描述】:

我要设计windows服务,我有一些问题:

    正确的错误处理,如果有错误发生在 服务?他会继续起床并登录吗?错误记录 在事件查看器中?他摔倒了吗? 长期运行会怎样?你怎么确定一切 正在按要求运行,他没有卡住? 如何处理高内存消耗、内存不足或其他错误 没有写入日志? 处理用户 - 如果为用户 A 创建日志并更改为 用户 B?重写还是从同一点继续? 如何处理时间? - 服务会自动启动吗?

谢谢。

【问题讨论】:

您使用哪种编程语言编写服务? C#? @GeoSn0w - 是的。 【参考方案1】:

    对于错误处理,我能推荐的最好的方法是利用try / catch 案例。这样,您可以确保处理意外发生的情况,并且您可以尝试纠正它或彻底关闭服务。请记住,异常不会传播到线程范围之外,因此您需要在每个线程中处理它们。

    为了能够判断服务是否正常,您可以定期登录到事件日志中服务的功能。如果您对每个线程进行适当的尝试/捕获,它应该会顺利进行。在 C# 中,您可以使用 log4net 和 EventLogAppender 在事件日志中记录关键/错误信息。

    如果您的服务无缘无故导致高内存使用,则可能是内存泄漏。 Microsoft 有一个名为“.Net CLR profiler”的免费工具,可让您正确分析您的服务并查看导致泄漏的确切原因。

    除非您正在处理受用户保护的文件(在这种情况下,您需要查阅服务的“登录”选项卡以为其提供适当的凭据),否则您的服务不应依赖于任何已登录的用户。服务独立于计算机上的用户运行。

    可以将服务设置为自动启动、仅按需启动或完全禁用。

【讨论】:

以上是关于windows服务中的设计和错误处理的主要内容,如果未能解决你的问题,请参考以下文章

Windows Mysql启动出现1069错误“由于登录失败而无法启动服务”的处理方法

MFC设计器中的“无法访问ActiveX控件类型库”错误

System.ServiceModel 错误在 ASP.NET Core API 中使用嵌入在 Windows 服务中的 WCF 时不支持操作

Windows 窗体设计器中的设计时错误

最新版本的 subversion 是不是处理了来自监视文件系统的 Windows 服务的“拒绝访问”错误?

C# windows 应用程序中的全局级错误处理