停止Windows服务并避免超时警告消息

时间:2014-02-10 11:14:35

标签: c# windows-services

我已经实现了一个Windows servcice,它旨在以预定的方式启动业务流程。一旦商业流程开始,就不应该通过停止服务来终止它。因此我使用了以下OnStop方法:

    protected override void OnStop()
    {
        /*
         * Check, whether the business process is currently running; 
         */ 
        if (_sh.IsBusinessProcessRunning())
        {
            eventLog1.WriteEntry(String.Format(
                "Stop instruction received! Service will be stopped, as soon the process '{0}' has completed. ", 
                ServiceHelper._businessExecutableName));
        }
        while (_sh.IsBusinessProcessRunning())
        {
            // Check each 30 seconds, whether the business process is still running
            Thread.Sleep(30000);
        }

        eventLog1.WriteEntry("Service stopped!");
    }

实际上这很好用,除了我得到超时错误对话框,这可能会让客户感到困惑。有没有办法在此对话框中修改消息或避免显示消息? (如果可能,我希望更新消息)


消息:

无法终止“localhost”上的服务“...”。 该服务未及时响应启动或控制请求。

1 个答案:

答案 0 :(得分:1)

你正在睡觉30秒但是Windows通常只需要大约12秒来关闭服务,所以你很容易超过它,这会导致弹出对话框。

您可以致电ServiceBase.RequestAdditionalTime来请求加班时间,该{{3}}应该告诉SCM您的服务仍然正在响应它正忙着。

我也不会在Thread.Sleep这么大的时间段内使用{{1}}。将它减少到几秒钟,无论如何它都处于循环中。