2017-05-29 1471 views
0

我有一个Windows服务在vb.NET中编程,使用Topshelf作为服务主机。 偶尔服务无法启动。在事件日志中,SCM写入错误7000和7009(服务没有及时响应)。我知道这是一个常见问题,但我(想)我已经尝试了一切,没有结果。 该服务仅依赖于WMI,并且没有耗时的操作。 我读过这个问题(Error 1053: the service did not respond to the start or control request in a timely fashion),但没有答案为我工作。Windows服务超时错误7000 7009

我想:

  • 集topshelf的启动超时。
  • 在“OnStart”方法的第一行中请求额外的时间。
  • 设置一个周期性的定时器,向SCM提供额外的时间。
  • 删除TopShelf并使用Visual Studio服务模板提供服务。
  • 将初始化代码和“OnStart”代码移动到新线程以立即返回。
  • 建立在RELEASE模式。
  • 在app.config文件(每个应用程序)中设置GeneratePublisherEvidence = false。
  • 未选中互联网设置(每台计算机)中的“检查发行商的证书撤销”。
  • 删除所有备用流(以防某些dll被标记为网页并被阻止)。
  • 删除任何“调试代码”
  • 将窗口的常规服务超时增加到120000ms。

另外:

  • 该服务不会尝试与用户以任何方式桌面进行通信。
  • UAC被禁用。
  • 服务在本地系统帐户上运行。

我认为,服务本身的代码是不是因为这个问题:

  • 它已经生产了超过两年。
  • 通常服务启动正常。
  • 事件日志中没有记录异常。
  • 服务dosn't被称为(因为该服务并没有真正失败,只是不响应SCM)的“错误”选项
  • 我已经注释了几乎所有的东西,追求这个错误! ;-)

任何帮助是值得欢迎的,因为我完全是出出主意,我一直是这样strugling 15天以上......

回答

0

我有这个开始发生后服务安装Windows Creator's Edition更新。基本上它使整个计算机变得更慢,这是我认为引发了这个问题。即使其中一项Windows服务也有超时问题。

我在网上学到的是服务的构造函数需要很快,但OnStart在SCM方面有更多的余地。我的服务有一个C#包装器,它包含一个在构造函数中调用的InitializeComponent()。我把这个电话转到了OnStart,问题就消失了。

+0

哎呀,对不起。经过更彻底的测试后,我发现将初始化移动到OnStart会导致其他问题。它应该留在构造函数中。 –

+0

如果您认为它是错误的,请删除您的答案,而不是留下评论。 – Alex