C# windows服务在windows关闭时的行为如何?

C# windows服务在windows关闭时的行为如何?,c#,windows,service,timeout,shutdown,C#,Windows,Service,Timeout,Shutdown,Windows关闭时停止Windows服务是否有超时?我知道有一个注册表项“WaitToKillServiceTimeout”,但是当Windows关闭时,这个超时对服务有影响吗?还是有另一个超时 我想知道,在关闭期间,当系统调用服务的OnStop方法时,它等待服务的时间有多长 服务能否阻止Windows关闭?来自: [WaitToKillServiceTimeout]确定在通知服务系统正在关闭后,系统等待服务停止的时间 然后是的,这是用于等待服务关闭的值,但请注意,它是为所有服务共享的: 如果

Windows关闭时停止Windows服务是否有超时?我知道有一个注册表项“WaitToKillServiceTimeout”,但是当Windows关闭时,这个超时对服务有影响吗?还是有另一个超时

我想知道,在关闭期间,当系统调用服务的OnStop方法时,它等待服务的时间有多长

服务能否阻止Windows关闭?

来自:

[WaitToKillServiceTimeout]确定在通知服务系统正在关闭后,系统等待服务停止的时间

然后是的,这是用于等待服务关闭的值,但请注意,它是为所有服务共享的:

如果所有服务在此值过期之前停止,系统将关闭

对于您的问题“服务能否阻止Windows关闭?”的答案是“或多或少”。您无法阻止Windows关闭(如果用户因为服务决定不应该关闭而无法关闭,这可能会让他们非常恼火),但是:

当该条目的值过期时,系统通知用户服务尚未停止。用户可以强制服务任务停止或继续等待。如果用户等待,此值指定用户多次通知服务未停止之间的间隔

请注意:

某些服务会增加此项的值,以便为清理任务提供更多时间

如果您的服务关闭缓慢,您可以增加该值(在安装期间)以给您更多的时间。理论上,使用一个非常高的值,您将推迟关机很长时间(但这种行为与取消它不同,并且不要忘记它是为所有服务共享的)


答:服务无法取消关机,但GUI应用程序可以使用此功能来完成此操作。

感谢您快速的回答;)ServiceBase.RequestAdditionalTime()是否覆盖[WaitToKillServiceTimeout],是否覆盖?@Mi.Sharp确实覆盖,但不会取消关机,而是延迟关机。此外,OnStop()是在工作线程中执行的,如果您的服务挂起(因为关机锁资源),服务可能不会更新检查点,SCM将决定挂起(终止)。简言之:如果您只需要更多时间,您可以调用RequestAdditionalTime(),等待另一个工作线程完成(用户将看到Windows正在关闭,这需要很长时间),但如果您的目标是取消关闭(UI将响应,并且不会发生关闭),则您必须取消它(使用一个与您的服务通信的小型隐藏GUI应用程序)。我不确定这篇文章是否完全正确;我认为系统不会在超时过期时通知用户,它只是继续关机。(在过去,当关机不一定会关闭电源时,服务实际上可以在关机后继续运行,尽管很明显,它们在这种状态下所能做的是相当有限的。)