2011-11-23 33 views
1

我需要在重新启动.Net 1.1服务时延迟30秒超时。由于后勤原因,我无法升级到.Net 2.0以利用ServiceBase.RequestAdditionalTime()方法。.Net 1.1中的ServiceBase.RequestAdditionalTime()

一个解决方法是在代码的开头调用SetServiceStatus。但是,为了依赖目的,我需要在设置之前执行所有代码。

我还着眼于设置注册表项ServicesPipeTimeout,但真的不希望对所有服务进行全局更改,因为我不知道可能会产生什么影响。

是否有任何等同于在.net 1.1中调用ServiceBase.RequestAdditionalTime()方法?

回答

1

如果你看一下在.NET 2.0中ServiceBase.RequestAdditionalTime方法(使用像ILSpy反编译工具)的源代码,你会看到,它的概念做两件事情:

  1. 分配指定毫秒的量提供给SERVICE_STATUS结构的dwWaitHint字段
  2. 调用SetServiceStatus Win32函数传递新SERVICE_STATUS结构

您可以在.NET 1.1中使用P/Invoke实现与Win32 API交互的相同功能。

+0

谢谢恩里科。这就是我最终的目标。只是想把这个优秀的介绍添加到Jason Clark的P/Invoke文章中。 http://msdn.microsoft.com/en-us/magazine/cc164123.aspx – unforgiven1987

+0

我很高兴我可以帮助:) –

+0

遇到关于获取服务状态句柄的后续问题。看到这里:http://stackoverflow.com/questions/8389670/get-service-status-handle-after-initializing-service – unforgiven1987