2

我有一个在 Windows 启动时启动的 .net 服务,有时(完全随机)该服务无法启动。

事件查看器显示:A timeout was reached (30000 milliseconds) while waiting for the MYSERVICE service to connect.

即使在服务无法启动的机器上,如果我手动启动它(在 Windows 登录后)它也能正常启动。

我的启动方法非常基本,它只是用实际的启动逻辑启动一个新线程(通常非常快)。

我的服务需要 .net 3.5 sp1 并且有这些问题的机器是 win7 x64。我怀疑它与.net 框架有关,但我不知道如何。这发生在客户端机器上,他安装了 .net 4 客户端配置文件。

有任何想法吗?

4

4 回答 4

3

我遇到过这样的问题。通常是由于启动时的机器负载。例如,由于许多其他服务也启动了,我在 SQL Server 上遇到了这个错误。

解决此问题的一种简单方法是将服务设置为以延迟模式启动,因为这样您的服务将在较少的 CPU 和 HD 负载下启动。

于 2012-05-31T15:45:23.933 回答
1

如果它依赖于另一个服务,则 make 设置依赖关系。

于 2012-05-31T16:30:48.457 回答
1

我们在 Windows 10 上遇到了类似的问题,大多数基于 .Net 的服务在启动时会失败,但以后可以手动启动就好了。出于某种原因,使用 .NET 编写的服务在 Windows 10 中启动需要更长的时间,但此修复适用于任何版本的 Windows,包括 Windows 7。默认情况下,如果服务启动时间超过 30 秒而没有响应,则服务被 Windows 终止。

我能够在注册表中将该行为更改为 60 秒。去:

HKLM\SYSTEM\CurrentControlSet\Control\

如果它不存在,请创建一个名为“ServicesPipeTimeout”(减去引号)的 DWORD(32 位)键。将其值设置为 60000(十进制)。这与以毫秒为单位的 60 秒相关。

我什至创建了一个 regfile 来自动执行此操作:

Windows 注册表编辑器版本 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control] "ServicesPipeTimeout"=dword:0000ea60

只需粘贴到记事本中并保存为 .reg 文件。

不是延迟启动,而是增加了启动后服务响应的时间。这解决了我们在多台机器上的问题。不幸的是,我仍然不知道为什么 .NET 服务需要这么长时间才能启动,以至于它们会被终止。但是,我觉得这是微软的错误,不一定是我们用户做错了什么......

于 2016-10-04T19:05:45.980 回答
0

对于任何在这个问题上苦苦挣扎的人,我们在一些较慢的 Windows 10 机器上遇到了同样的问题。我们可以通过在配置文件中将 generatePublisherEvidence 设置为 false 来解决这个问题。

您可以在此处阅读更多相关信息-> https://blogs.msdn.microsoft.com/winsdk/2010/01/29/you-may-get-a-service-timeout-from-a-signed-net-managed -service-application-while-the-system-is-doing-a-revocation-check-of-the-certificate-over-the-internet/

于 2019-02-02T18:06:15.483 回答