ResumeAutomatic& ResumeSuspend Windows服务模式

时间:2015-05-25 07:43:32

标签: c# .net windows-services

根据MSDN documentation

  

ResumeAutomatic:计算机已自动唤醒以处理事件。

     

注意:如果系统在广播ResumeAutomatic后检测到任何用户活动,它将广播ResumeSuspend事件,让应用程序知道他们可以恢复与用户的完全交互。

     

ResumeSuspend:暂停后系统恢复运行。

这是否意味着' ResumeAutomatic'当计算机从睡眠状态唤醒并且“恢复暂停”时调用。在用户输入凭据后登录时调用?

我正在使用tcp套接字与服务器通信。因此,为了在系统从休眠状态恢复时重新连接到服务,我有以下代码

    protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
    {
        Logger.Log("Power status is : " + powerStatus);
        if (powerStatus == PowerBroadcastStatus.ResumeAutomatic)
        {
            ConnectionWatchdog.ReConnect();
        }
        return base.OnPowerEvent(powerStatus);
    }

但我观察到枚举值是随机的。以下是3种不同唤醒时间的3种不同痕迹。

20150525#094449 ::电源状态为:暂停

20150525#094716 ::电源状态为:ResumeSuspend

20150525#103431 ::电源状态为:暂停

20150525#103525 ::电源状态为:ResumeSuspend

20150525#103525 ::电源状态为:ResumeAutomatic

20150525#103558 ::电源状态为:暂停

20150525#103835 ::电源状态为:ResumeAutomatic

1 个答案:

答案 0 :(得分:7)

它应该如何运作

(这不是在实践中如何运作 - 见下文。)

ResumeAutomatic

计算机在睡眠后恢复时,始终会发送此消息。

ResumeSuspend

计算机在睡眠后恢复,并且Windows认为用户在场 - 即,有人坐在机器前面。当a)唤醒是由人为交互(某人按下电源按钮,按下按键,移动鼠标等)引起时,会发送此消息;或b)由于唤醒定时器,机器自动唤醒后第一次出现人机交互。

要直接回答您的问题, ResumeSuspend 会在用户首次与计算机进行交互时发送。这可能是输入密码来解锁它,但它并不是必须的。如果用户只是摆动鼠标,仍然会发送 ResumeSuspend

总结:

  1. 当计算机从睡眠状态恢复时,始终会发送ResumeAutomatic
  2. 当计算机从睡眠状态恢复并且Windows认为用户在场时,
  3. ResumeSuspend 将被发送以及 ResumeAutomatic
  4. 实际如何运作

    1. ResumeAutomatic 偶尔也不会被发送。这是一个长期存在的错误,可能是在Windows本身。幸运的是,我从来没有看到计算机唤醒 ResumeAutomatic ResumeSuspend 未发送。 如果您需要知道系统已恢复,但不关心用户是否在那里,您需要同时监听 ResumeAutomatic ResumeSuspend 并将它们视为同一件事。
    2. ResumeSuspend 非常不可靠。我从来没有看到在发送时发送,但是当不是时,它经常会发送 是 - 实际上根本就没有用户。无论是由于Windows中的一个或多个错误,第三方驱动程序,固件还是硬件,我都不知道。
    3. ResumeAutomatic 发送时没有相应的 ResumeSuspend 时,系统空闲超时很短(Windows 10中默认为2分钟),并且连接的显示器处于省电模式。当发送相应的 ResumeSuspend 时,系统空闲超时正常(Windows 10中默认为30分钟),并且连接的显示被唤醒。这样如果计算机自动唤醒以进行维护等,计算机就会尽快恢复睡眠状态。如果微软可以让它可靠地工作,那将是很棒的。
    4. 我不幸地不得不深入到Windows的兔子洞里面。支持电源管理,配置文件等.Vista时代的东西令人沮丧,因为它基于质量和周到的设计,但实现和文档都不是不完全,并且从未修复过。还有很多其他问题我没有进入这里。这有点遗憾。