Windows服务在OnStart之后执行逻辑

时间:2015-07-21 02:44:49

标签: windows service timer jobs

我有一个Windows服务,里面有几个计时器作业。在OnStart方法中,我启动所有这些计时器。实际上,从服务控制台启动服务需要花费大量时间,而且大部分时间都会报告: Windows无法启动' servicename '本地计算机上的服务。 该服务没有及时响应启动或控制请求。

我知道我可以创建一个封装其他计时器的计时器,这样我就可以在OnStart事件之外启动它们了。但是,我正在寻找其他可能的解决方案,因为我不喜欢有一个单独的计时器,除了启动其他进程之外什么都不做。

1 个答案:

答案 0 :(得分:1)

在OnStart期间执行Web或数据库调用等外部操作通常不安全,因为您无法预测它们需要多长时间,an excessively long service startup time can interfere with the system

  

服务控制管理器(SCM)等待服务报告SERVICE_RUNNING状态。建议服务尽快报告此状态,因为在此期间系统中需要与SCM交互的其他组件将被阻止。某些功能可能需要直接或间接与SCM交互。

因此,正确的解决方案是将此初始化移动到单独的线程中。

但是,如果您不想这样做,可以致电RequestAdditionalTime

  

RequestAdditionalTime方法旨在由重写的OnContinue,OnPause,OnStart或OnStop方法调用,以请求待处理操作的额外时间,以防止服务控制管理器(SCM)将服务标记为未响应。 / p>