windows服务启动超时
-
03-07-2019 - |
题
有没有办法为每个服务设置不同的服务启动超时值?我可以使用 ServicesPipeTimeout 注册表项更改它,但它是每台计算机的(http://support.microsoft.com/kb/824344).
目前我唯一想到的就是在不同的线程中完成所有耗时的启动操作。
解决方案
最好尽快完成服务。因此,在 start 状态期间,只执行您绝对需要确认它成功启动的内容;然后做其余的事。如果 start 仍然是一个漫长的过程,请使用 SetServiceStatus 定期通知服务控制管理中心您尚未完成,因此不会超时您的服务。
其他提示
我同意Romulo尽快开始服务。但是,如果您需要时间并且使用的是.NET Framework 2.0或更高版本,则可以考虑使用ServiceBase.RequestAdditionalTime()方法。
protected override void OnStart()
{
this.RequestAdditionalTime(10000);
// do your stuff
}
只需在另一个帖子中做时间密集的事情
protected override void OnStart(string[] args)
{
var task = new Task(() =>
{
// Do stuff
});
base.OnStart(args);
task.Start();
}
我还必须处理一项服务,该服务可能需要几秒钟/分钟才能有一个良好的开始。当服务启动时,它会尝试连接到 SQL Server。然而,当整个服务器重新启动时,我的服务在 SQL Server 之前启动。(我知道服务依赖性,但由于特定原因它不适用于我的情况......)。我尝试循环尝试连接 SQL Server 10 次,但由于超时,Windows 在第二次尝试之前终止了我的服务。
我的解决方案 :我在服务的“onStart()”中添加了一个计时器。然后,该服务的“onTick()”方法尝试连接到 SQL Server 10 次(其中等待了 30 次)。启动时不再超时。
所以基本上,
- 我的服务将在 5 秒后启动。
- 服务启动后10秒发射了一个计时器。
- 计时器尝试10次(每次等待30秒)以连接到SQL Server。
- 如果成功,计时器将自行禁用,如果失败(10 次尝试后),我将停止服务。
请注意解决问题的更优雅的方法,但也许我的解决方案的某些部分可以帮助任何比我处于相同情况的人,
不隶属于 StackOverflow