2013-12-22 63 views
2

我試圖實現一個Windows服務,當系統進入待機模式(睡眠)時發送消息。我的測試機器操作系統是Windows 8專業版。該服務具有CanHandlePowerEvents = true和OnPowerEvent,並且確實收到電源事件。Windows服務OnPowerEvent

我遇到的問題是:OnPowerEvent永遠不會收到QuerySuspend消息。但是,它在計算機進入掛起狀態之前會收到掛起消息,但操作系統不會等待OnPowerEvent方法完成,無論如何,它都會進入掛起模式,然後在繼續之後繼續執行OnPowerEvent方法。

事情是通過互聯網發送信息可能需要1-2秒,所以它總是在計算機恢復後發送,並且從未進入暫停模式,因爲它應該工作。

任何ideeas如何解決這個問題,任何人?

+0

OnPowerEvent異步運行,無論如何,沒有什麼可以做,延遲關機。抓住這個想法,你不能讓它變得堅實。 –

回答

1

在Vista和更高版本中,應用程序有兩秒鐘的時間來完成由PBT_APMSUSPEND事件觸發的任何操作。該設置不可配置。

當應用程序收到系統即將進入睡眠的通知時,它應該快速執行任何必要的操作並返回消息循環。在超時前處理此消息時,系統允許每個應用程序最多持續兩秒鐘。

http://msdn.microsoft.com/en-us/library/aa373223%28v=vs.85%29.aspx

http://blogs.msdn.com/b/oldnewthing/archive/2011/11/24/10241125.aspx