Windows服务启动超时

时间:2008-10-19 13:02:49

标签: windows-services timeout startup

有没有办法为每项服务的服务启动超时设置不同的值? 我可以使用ServicesPipeTimeout注册表项更改它,但它是每台计算机(http://support.microsoft.com/kb/824344)。

目前,我唯一想到的是在不同的线程中完成所有耗时的启动操作。

4 个答案:

答案 0 :(得分:79)

我同意Romulo尽快开始服务。但是,如果您需要时间并且使用的是.NET Framework 2.0或更高版本,则可以考虑使用ServiceBase.RequestAdditionalTime()方法。

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.requestadditionaltime.aspx

protected override void OnStart()
{
    this.RequestAdditionalTime(10000);
    // do your stuff
}

答案 1 :(得分:36)

最好尽快完成服务。因此,在 start 状态期间,只执行您绝对需要确认它成功启动的内容;然后做其余的事。如果 start 仍然是一个漫长的过程,请定期使用SetServiceStatus通知服务控制管理器您还没有完成,因此它不会超时你的服务。

答案 2 :(得分:4)

只需在另一个帖子中做时间密集的事情

   protected override void OnStart(string[] args)
    {
        var task = new Task(() =>
        {
            // Do stuff
        });
        base.OnStart(args);
        task.Start();
    }

答案 3 :(得分:1)

我还必须处理一项可能需要几秒钟/几分钟才能获得良好开端的服务。服务启动时,它会尝试连接到SQL Server。但是,当整个服务器重新启动时,我的服务是在SQL Server之前启动的。 (我知道服务依赖,但由于特殊原因它不适用于我的情况....)。我尝试循环尝试10次连接到SQL Server,但是由于超时,Windows在第二次尝试之前就终止了我的服务。

我的解决方案:我在服务的“onStart()”中添加了一个Timer。然后,该服务的“onTick()”方法尝试连接到SQL Server 10次(其中等待30)。启动时不再有超时。

基本上,

  • 我的服务在5秒内开始。
  • 在服务10秒后启动计时器 启动。
  • 计时器尝试10次[每次等待30秒] 连接到SQL Server。
  • 如果成功,计时器将自动关闭,如果没有(10次尝试后),我停止服务。

请注意解决问题的更优雅的方法,但也许我的解决方案的某些部分可能会帮助处于相同情况下的任何人,比如我,