C# 停止windows服务时出错

C# 停止windows服务时出错,c#,windows-services,C#,Windows Services,我正在使用Windows服务。它很好用。当我试图从services.msc停止服务时,它抛出以下错误: Windows无法停止本地计算机上的xxx服务。 服务没有返回错误。这可能是内部Windows错误或内部服务错误。 如果问题仍然存在,请与系统管理员联系 如果我再次尝试停止,将花费大量时间,然后抛出错误,如下所示: Windows无法停止本地计算机上的xxx服务。 错误1061:服务此时无法接受控制消息 此时,服务已停止。但如果我尝试重新安装该服务,它会抛出另一个错误: Windows无法停止

我正在使用Windows服务。它很好用。当我试图从
services.msc
停止服务时,它抛出以下错误:

Windows无法停止本地计算机上的xxx服务。 服务没有返回错误。这可能是内部Windows错误或内部服务错误。 如果问题仍然存在,请与系统管理员联系

如果我再次尝试停止,将花费大量时间,然后抛出错误,如下所示:

Windows无法停止本地计算机上的xxx服务。 错误1061:服务此时无法接受控制消息

此时,服务已停止。但如果我尝试重新安装该服务,它会抛出另一个错误:

Windows无法停止本地计算机上的xxx服务。
错误1001:指定的服务已标记为删除

关闭
services.msc
后,我可以重新安装该服务,然后一切正常

OnStop()
中,我正在执行一些冗长的操作,完成这些操作需要时间

你知道我怎样才能使整个事情顺利进行吗

--编辑--

这就是我的
OnStop
方法的外观:

protected override void OnStop()
{
    base.OnStop();
    //Some lengthy operation      
}

有一个注册表项,用于控制windows在放弃服务之前让服务关闭的时间:


简单地说,如果您的服务在长时间操作后实际关闭,增加此时间可以解决此问题。

windows服务在启动和停止事件中有默认超时。通常情况下,如果您在这些事件中的任何一个事件中执行耗时的操作,请启动一个新线程,并让该操作在后台执行

通常windows服务中的OnStart和OnStop事件用于启动进程,耗时的进程将在子线程中执行该进程


希望这能解决您的问题。

不能要求他们更改系统配置。我能不能在我的服务中具体说明一下?我不这么认为。需要这么长时间才能完成的服务是什么?这可以优化吗?它实际上是一行代码。我订阅了一个发布消息的外部应用程序。我所做的就是取消订阅。取消订阅要花一点时间。听起来不太对。如果你正在拆除一个客户端(停止服务),我敢打赌你不需要正式退订。在最坏的情况下,服务器应该检测到TCP会话已经结束,并停止发送消息(我认为,如果托管您的服务的计算机崩溃,它会停止发送消息)。服务器跟踪谁订阅了,并相应地发送消息。如果我不退订,它就不允许我再订阅了。我还注意到,若我使用卸载程序,它运行良好,不会引发任何错误。它停止服务并从系统中删除。我们只是使用取消令牌源停止OnStop方法中的一些任务。任务(来自任务并行库)是否也会导致.Net运行时长时间停止?