2011-11-23 32 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