强制窗口等待服务在关闭时停止

时间:2010-01-05 20:21:38

标签: c# .net windows windows-services

我遇到了一个我用C#编写的Windows服务无法解决的问题。我想要做的是等待一个指定的时间让子进程终止,然后我被迫杀死它并停止服务。我已将超时设置为5到15秒之间的任何时间,我的服务等待适当的时间,然后杀死孩子并在我通过mmc服务窗口停止时停止。但是,如果我关闭计算机,我的服务会在能够等待和正常停止之前被吹走。我已经读过Windows允许服务在关闭之前超时30秒。我的代码执行的时间远远少于30秒,最大值约为20秒左右,具体取决于我设置的超时时间。

我尝试在win32 Api中使用SetServiceStatus()函数,但它没有改变代码的功能。我已经验证函数调用是否成功。有没有其他方法可以强制Windows等待我的服务正常关闭?我在Windows 7 x86和Windows Vista Sp1 x86中进行测试。

3 个答案:

答案 0 :(得分:2)

Windows 让任何服务阻止关机,这是设计使然。正如Gyuri所说,你必须为你的应用考虑不同的设计。

答案 1 :(得分:1)

这是一个全局Windows设置,显然是:http://support.microsoft.com/kb/305788。如果我不得不依赖用户让我的服务关闭,我会担心。我会定期保存我的数据。

答案 2 :(得分:0)

OnSTart和OnSTop继承自一个基类,它对你有很大帮助。这些方法的所有实现应该是启动或停止客户端代码,Windows将完成其余的工作。

我要注意的是,我使用C#和.Net的ServiceBase实现这样做,我不能权威地谈论C / C ++代码或API。