重启后"等待服务连接时达到超时"错误

Zac*_*lan 45 .net c# windows-services timeout

我有一个自定义编写的Windows服务,我在许多Hyper-V VM上运行.作为正在运行的一些自动化测试的一部分,VM每小时重启几次.该服务设置为自动启动,几乎所有时间,它启动正常.

但是,也许有5%的时间,没有我能辨别的模式,服务无法启动.当它失败时,我在事件查看器中收到错误说

等待我的服务名称服务连接时达到超时(30000毫秒).

发生这种情况时,我可以手动启动服务,或者重新启动,服务将正常启动.

我无法弄清楚的是,我的代码中似乎没有发生30秒的超时.我的服务类的OnStart()方法的第一行将"Starting ..."记录到其log4net日志中.当服务无法启动时,我甚至都没有记录任何内容,这表明log4net无论出于何种原因都无法登录,或者在我的OnStart()被调用之前发生了超时.

该服务运行在各种操作系统上,从XP一直到Win7和2008R2,我知道将服务设置为延迟启动可以解决这个问题,对于Vista及更高版本,但这似乎是一个黑客.

我无法对此进行远程调试,因为它间歇性地发生并且在系统启动期间,我不知道如何进一步尝试弄清楚发生了什么.有任何想法吗?

Jer*_*Gee 6

我的猜测 - 就是它的全部 - 是磁盘在启动过程中发生剧烈颠簸,直到.NET框架本身没有在Windows分配服务启动的30秒内启动.

一个kludgy解决方法可能是将服务设置为手动启动,然后在非托管代码(例如C++,Delphi)中编写一个非常小的存根服务来启动服务.

另一种方法可能是从另一台机器远程启动服务.该sc命令应该很好地完成工作.


JDT*_*LH9 6

当我尝试使用 powershell 安装服务时,我在事件查看器中看到此错误。

我遇到的问题是,我的 powershell 脚本中的“服务名称”和“服务显示名称”的值与我在控制台应用程序的 program.cs 文件中指定的值不同。