我有一个.net服务,在Windows启动时启动,有时(完全随机)服务无法启动。
事件查看器显示: A timeout was reached (30000 milliseconds) while waiting for the MYSERVICE service to connect.
即使在我手动启动服务(Windows登录后)服务无法启动的计算机上,它也可以正常运行。
我的启动方法非常基础,它只是用实际启动逻辑启动一个新线程(通常非常快)。
我的服务需要.net 3.5 sp1,遇到这些问题的机器是win7 x64。 我怀疑它与.net框架有关,但我不知道如何。 这发生在客户端计算机上,并且安装了.net 4客户端配置文件。
有什么想法吗?
答案 0 :(得分:2)
我遇到过像这样的问题。通常是由于启动时的机器负载。例如,由于许多其他服务也启动,我在SQL Server上出现此错误。
解决此问题的一种简单方法是将服务设置为以延迟模式启动,因为这样您的服务将在较少的CPU和HD负载下启动。
答案 1 :(得分:1)
如果它依赖于另一个服务,则设置依赖项。
答案 2 :(得分:0)
我们在Windows 10上遇到了类似的问题,其中大多数基于.Net的服务在启动时会失败,但可以稍后手动启动就好了。出于某种原因,使用.NET编写的服务需要更长时间才能在Windows 10中启动,但此修复程序适用于任何版本的Windows,包括Windows 7.默认情况下,如果服务启动时间超过30秒而没有响应,则服务由Windows终止。
我能够在注册表中将该行为更改为60秒。转到:
HKLM \系统\ CurrentControlSet \控制\
如果它还不存在,请创建一个名为" ServicesPipeTimeout"(减去引号)的DWORD(32位)密钥。将其值设置为60000(十进制)。这与60秒(以毫秒为单位)相关。
我甚至创建了一个自动执行此命令的注册表文件:
Windows注册表编辑器版本5.00
[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制] " ServicesPipeTimeout" = DWORD:0000ea60
只需粘贴到记事本中并另存为.reg文件。
不延迟启动,但启动后服务响应时间增加。这解决了我们在多台机器上的问题。不幸的是,我仍然不知道为什么.NET服务需要很长时间才能终止它们。但是,我觉得这是微软的错误,并不一定是我们用户做错了什么......
答案 3 :(得分:0)
对于在此问题上苦苦挣扎的任何人,我们在某些速度较慢的Windows 10计算机上都遇到了同样的问题。我们可以通过在配置文件中将generatePublisherEvidence设置为false来解决此问题。