2010-01-05 76 views
5

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

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

回答

2

Windows将不是让任何服务阻止关机,这是故意的。正如久里所说,你必须为你的应用考虑一个不同的设计。

+0

+1:*显然*这里的解决方案是让服务花费更少的时间停下来。所以许多应用程序忽略了这一点的重要性。 – 2010-01-08 17:10:19

0

OnSTart和OnSTop是从一个基本类继承而来,它对你有很大的帮助。这些方法的所有实现应该做的是启动或停止客户端代码,而Windows将完成剩下的任务。

我会告诉你这一点,因为我使用C#和.Net的ServiceBase实现做到这一点,我无法权威地谈论C/C++代码或API。

1

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

+0

这很糟糕。我有一个Windows服务托管虚拟机,需要时间关闭。我不希望它无限期地等待,但更长的超时时间(稍等一会儿)将确保我的机器正常关闭。 – Jens 2012-11-16 00:58:26