簡體   English   中英

C#Windows服務並不總是在關機時停止

[英]C# windows service does not always stop on shutdown

我使用c#2010創建了一個Windows服務。問題是當計算機關閉時,服務沒有時間停止並且onstop並不總是在執行。 我並不是總是說,因為它有時會停止。 我曾嘗試使用在vista中引入的Windows預關閉通知,但結果更好但不是絕對的。

無論如何讓Windows等待我的服務停止? 反正有沒有改變訂單窗口停止服務?

根據http://msdn.microsoft.com/en-us/library/windows/desktop/ms685149(v=vs.85).aspx ,在系統放棄和關閉之前,服務通常需要大約20秒才能關閉無論如何。

如果您的服務需要更多時間關閉,您可能會發送STOP_PENDING消息,但即使這樣,您也只能在系統顯示您永遠不會關閉之前大約125秒,並從下方拉出地毯。您。

在C#中,您將在關機期間調用RequestAdditionalTime服務。 同樣,不能保證你會得到額外的時間,但你可以要求它。 但是請記住,如果您要求更多時間,最好在該時間到期之前完成,否則您可以要求更多時間。 但最終系統會讓你失望(再次,可能在不到2分鍾內)。

通常,我發現最好構建服務,以便可以快速關閉它。 如果您在幾秒鍾內無法關閉,則可能需要更改設計。

這可以為您(和尋找相同答案的某人)提供答案: 為什么RequestAdditionalTime()方法無法在Vista / 7中重新啟動?

...假設Windows允許所有服務關閉13秒。 其他一些服務需要12秒的CPU時間(因此其他服務在此期間無法執行)並最終關閉。 剩下的剩下1秒。 Windows將殺死它們。

這就是為什么它有時會正確關閉的原因,有時卻沒有。

順便說一句,Vista有20秒。 殺死服務,W7有12秒。 W8有5秒。

在從ServiceBase派生的服務類中,可以替代OnStop來請求其他時間:

base.RequestAdditionalTime(1000 * 60 * 2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM