Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在服务关闭时强制windows等待服务停止_C#_.net_Windows_Windows Services - Fatal编程技术网

C# 在服务关闭时强制windows等待服务停止

C# 在服务关闭时强制windows等待服务停止,c#,.net,windows,windows-services,C#,.net,Windows,Windows Services,关于我用C#编写的Windows服务,我遇到了一个无法解决的问题。我试图做的是等待一段指定的时间,让子进程终止,然后再强制终止它并停止服务。我已经将超时时间设置为5到15秒,我的服务会等待适当的时间,然后杀死孩子,并在我通过mmc服务窗口停止时停止。然而,如果我关闭计算机,我的服务在它能够正常等待和停止之前就被破坏了。我曾读到,Windows允许服务在关闭前有30秒的超时时间。我的代码执行时间比30秒要短得多,最大值约为20秒左右,具体取决于我设置的超时时间 我尝试在win32 Api中使用Se

关于我用C#编写的Windows服务,我遇到了一个无法解决的问题。我试图做的是等待一段指定的时间,让子进程终止,然后再强制终止它并停止服务。我已经将超时时间设置为5到15秒,我的服务会等待适当的时间,然后杀死孩子,并在我通过mmc服务窗口停止时停止。然而,如果我关闭计算机,我的服务在它能够正常等待和停止之前就被破坏了。我曾读到,Windows允许服务在关闭前有30秒的超时时间。我的代码执行时间比30秒要短得多,最大值约为20秒左右,具体取决于我设置的超时时间


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

OnSTart和OnSTop是从一个基类继承而来的,这个基类对您非常有用。这些方法的所有实现应该做的就是启动或停止客户端代码,其余的由windows来完成


我要警告一下,我使用C#,而.Net的ServiceBase实现就是这样做的,我不能权威地谈论C/C++代码或API。

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

Windows不会让任何服务阻止关机,这是出于设计。正如Gyuri所说,你必须为你的应用程序考虑一个不同的设计。

+ 1:显然,这里的解决方案是让服务花费更少的时间来停止。太多的应用程序忽略了这一点的重要性,这太糟糕了。我有一个windows服务,它托管的虚拟机需要时间才能关闭。我不想让它无限期地等待,但更长的超时时间(略多于一分钟)将确保我的机器正确关闭。