我已经实现了一个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”上的服务“...”。 该服务未及时响应启动或控制请求。
答案 0 :(得分:1)
你正在睡觉30秒但是Windows通常只需要大约12秒来关闭服务,所以你很容易超过它,这会导致弹出对话框。
您可以致电ServiceBase.RequestAdditionalTime来请求加班时间,该{{3}}应该告诉SCM您的服务仍然正在响应它正忙着。
我也不会在Thread.Sleep
这么大的时间段内使用{{1}}。将它减少到几秒钟,无论如何它都处于循环中。