2013-05-06 90 views
2

背景:一位客户给了我一个第三方开发的Windows服务,他们希望我为他们运行。但是,当我开始服务,它超时,我得到的1053“服务没有响应......及时风格”的错误。为什么此服务“未及时响应启动或控制请求”?

我已经反映了程序集以获取正在它的启动方法中执行的代码,但从粗略的一瞥它看起来应该返回。

实际问题:有人可以解释为什么此服务导致1053错误?

(检查日志文件已经确认计时器已被初始化和火灾不止一次服务终止以前多了。)

private void InitTimers() 
{ 
    if (this._config.RunMode == RunModes.Continuous) 
    { 
     this.srvcTimer.Interval = Math.Max(this._config.Interval.TotalSeconds, 1.0) * 1000.0; 
    } 
    else 
    { 
     this.srvcTimer.Interval = 60000.0; 
    } 
    this.srvcTimer.AutoReset = true; 
    this.srvcTimer.Enabled = true; 
} 
+0

初始化过程中出错可能是原因,是否还有其他错误记录?您可能需要扩展日志记录以进行更好的调试。 – 2013-05-06 16:53:26

+0

检查相关主题 http://stackoverflow.com/questions/158371/error-1053-the-service-did-not-respond-to-the-start-or-control-request-in-a -tim – user2830624 2013-11-19 10:40:00

+0

在您的服务的开始功能中发布代码 – 2014-12-23 06:45:32

回答

3

服务构造函数必须在“及时”的方式返回服务成功启动。这意味着您不能在构造函数中启动一个潜在的昂贵操作,但必须将其委托给另一个线程。

通常情况下,您可能会发现在开发服务时连接到本地数据库没有问题,但是一旦部署它并且必须通过Internet连接,则会发现它失败。

没有看到构造函数中的确切代码,我不能肯定地说,但如果你将它移入线程,服务应该成功启动。显然这意味着你需要有一些方法来检查服务是否已经正确启动并从线程向主程序报告错误。

-1

这是因为您已经定义了您的服务日志,并将其更改为代码。

我最近遇到此,解决的办法是删除服务日志注册表:

HKLM/System/ControlSet001/services/eventlog/<your service name> 

如果你不知道这一点,请备份注册表第一。

相关问题