C# 处理.net windows服务中的停止

C# 处理.net windows服务中的停止,c#,.net,windows-services,C#,.net,Windows Services,我相信这是一个非常常见的情况,但我在MSDN上找不到太多关于它的信息 假设我有一个正在执行事务的服务,当我收到停止请求时,我希望确保在实际流程终止之前完成当前事务 我知道windows似乎有一个“停止”状态,但我不确定如何从ServiceBase.OnStop方法控制它 当我注册停止请求后,是否希望我从OnStop返回?如果是这样,我如何表明我实际完成的时间 或者,在当前事务完成之前,我是否应该阻止并不从OnStop返回?(即,在调用OnStop和OnStop返回之间,windows会自动将服务

我相信这是一个非常常见的情况,但我在MSDN上找不到太多关于它的信息

假设我有一个正在执行事务的服务,当我收到停止请求时,我希望确保在实际流程终止之前完成当前事务

我知道windows似乎有一个“停止”状态,但我不确定如何从ServiceBase.OnStop方法控制它

当我注册停止请求后,是否希望我从OnStop返回?如果是这样,我如何表明我实际完成的时间


或者,在当前事务完成之前,我是否应该阻止并不从OnStop返回?(即,在调用OnStop和OnStop返回之间,windows会自动将服务置于“停止”状态)

如果您有某种线程执行事务,您应该在OnStop中等待它完成(或取消,您的决定)。如果OnStop返回,则应该停止服务,而不仅仅是标记为停止或类似的操作。

此外,
OnStop
方法有一个超时(我记得默认为30秒)。如果该方法没有在这段时间内完成执行,那么停止服务将被中止。谢谢各位-看起来我这些年来一直在做错事:-)还发现了一篇优秀的文章,看起来.Net团队很好地将我们从SCM交互的细节中抽象出来;遗憾的是,框架文档没有对其进行描述