我有一个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天以上......
哎呀,对不起。经过更彻底的测试后,我发现将初始化移动到OnStart会导致其他问题。它应该留在构造函数中。 –
如果您认为它是错误的,请删除您的答案,而不是留下评论。 – Alex