启动Windows服务的超时是多少?

Grz*_*nio 9 .net c# windows-services timeout

我已经部署了我的Windows服务(使用独立的安装程序类和SC.EXE),但是当我尝试启动它时出现错误:

---------------------------
Services
---------------------------
Could not start the MyName service on Local Computer.



Error 1053: The service did not respond to the start or control request in a timely fashion.
Run Code Online (Sandbox Code Playgroud)

什么是超时?感觉就像大约3秒钟.如果我的服务需要更长时间,我该怎么办?

Ben*_*n M 15

在您的服务类中,使用ServiceBase.RequestAdditionalTime()OnStart/OnStop方法:

// request an additional 4 seconds to complete the operation
RequestAdditionalTime(4000);  
Run Code Online (Sandbox Code Playgroud)


Ree*_*sey 13

创建服务的常规方法是让启动代码创建一个新线程,并在该线程中运行您的服务.

服务启动应该几乎是即时的 - 只不过是用你的"真实"工作产生一个新线程.

如果你花了三秒多的时间,这表明你在主线程中正在做真正的工作,而不是为你的服务创建一个单独的工作.

  • 启动时有3秒的时间限制是有原因的.有一些方法可以扩展它(RequestAdditionalTime()),但建议服务应该迅速启动,和/或将工作推送到一个单独的线程,并以不同的方式发出警报.花费很长时间进行启动将阻止其他服务迅速启动,这是一个糟糕的设计,IMO. (3认同)
  • 这个设计有点奇怪 - 为什么我假装我的服务可以在3秒内启动,当它在第4秒实际失败时? (3认同)
  • 这假设设计不佳,可能不存在.复杂的初始化可能需要额外的时间,并且"无法响应"消息会警告用户启动失败.如果线程中发生故障并且服务因此停止,则唯一可见的证据(没有单独的监视UI)将位于事件日志中. (2认同)