是否有一种方法可以为每个服务设置不同的服务启动超时时间?我可以使用ServicesPipeTimeout注册表键更改它,但它是适用于整台机器的(http://support.microsoft.com/kb/824344)。
目前我想到的唯一办法就是在不同的线程中执行所有耗时的启动操作。
是否有一种方法可以为每个服务设置不同的服务启动超时时间?我可以使用ServicesPipeTimeout注册表键更改它,但它是适用于整台机器的(http://support.microsoft.com/kb/824344)。
目前我想到的唯一办法就是在不同的线程中执行所有耗时的启动操作。
我同意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
}
尽可能快地启动服务是良好的实践。因此,在开始状态下,只需执行您确实需要的操作来确认成功启动,并稍后处理其他操作。如果启动过程仍然很长,请使用SetServiceStatus定期通知服务控制管理器表示您尚未完成,这样它就不会超时您的服务。
在另一个线程中执行耗时任务
protected override void OnStart(string[] args)
{
var task = new Task(() =>
{
// Do stuff
});
base.OnStart(args);
task.Start();
}
// Do stuff
抛出异常,它将被吞噬而不是停止/崩溃服务。实际上,你可能希望知道服务没有工作,而不是“运行”,但实际上什么也没做或者没有正常工作。 - deadlydog