2

背景:一位客户给了我一个第三方开发的 Windows 服务,他们希望我为他们运行该服务。但是,当我启动服务时,它会超时并且我得到 1053“服务没有响应......及时时尚”错误。

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

实际问题:有人可以解释为什么此服务会导致 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;
}
4

2 回答 2

3

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

通常,您可能会发现在开发服务时连接到本地数据库很好,但是一旦您部署它并且必须通过 Internet 连接,您会发现它失败了。

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

于 2013-05-06T16:56:13.637 回答
-1

这是因为您已经定义了服务日志并在代码中对其进行了更改。

我最近遇到这个,解决方法是删除服务日志注册表:

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

如果您对此不确定,请先备份您的注册表。

于 2014-12-23T05:46:05.697 回答