• WINDOWS 8下,时间相关服务程序需要override OnPowerEvent事件


    对于绝大多数人来说,win8的开机速度变快了。

    在windows 8内部,这是由于使用了一些技术,使得关机过程类似于传统的休眠——将内存中的数据保存到硬盘,然后断电,而开机的时候,则只需要回复内存中的数据就可以了。

    不过对于自己制造的服务程序来说,则需要考虑一些别的东西——实际上,这是所有与时间相关的,有良好设计的应用程序所应该具有的,但由于这个服务程序是自己用,在其他操作系统下一般不会选择挂起到磁盘(休眠)或挂起到内存(睡眠),因此从未考虑过该问题,即:从未捕获过OnPowerEvent事件。

    这个服务是用来解决登录网络的麻烦的,让系统每次开机都自动登录网络——而网络在一段时间没有使用的情况下是会自动断开的。因此,但我查看日志发现开机没有启动这个服务的记录,而sc query显示该服务正在运行的时候,我有些惊讶。

    经过测试,在windows 8重启的时候,会直接OnStart,但或许是没有装载dotnet运行环境,大约在onstart一分钟后,逻辑才执行结束。这个行为我将进一步分析。不过让我有些奇怪的是没有OnStop的记录。

    (update:刚刚写了一些更为细致的log,发现onstart需要一分钟这个不是windows规定的行为,而是HttpWebRequest的GetRequestStream需要的时间太长。从14:34:56,097开始到14:35:47,823结束,尚不确定是什么原因,如果您明确,请您教诲)

    而在关机的时候,OnPowerEvent事件将传入枚举参数Suspend(OnPowerEvent:Suspend)。开机的时候从磁盘恢复,ResumeSuspend被传入(OnPowerEvent:ResumeSuspend),紧接着,ResumeAutomatic被传入(OnPowerEvent:ResumeAutomatic)。

    曾经我觉得该服务的Start_Pending时间过长,因此修改了服务的启动次序。但修改后,进入win8时需要等待约1min才能进入桌面,在此期间计算机停止响应但鼠标可以移动。因此还是不建议修改服务启动组的。

  • 相关阅读:
    表白利器,马赛克拼贴照片制作
    听说国漫最近崛起了,那我们就来爬几部国漫看看(动态加载,反爬)
    python爬虫--看看虎牙女主播中谁最“顶”
    “花小猪”,滴滴搬起石头砸自己的脚?
    Linux命令学习之awk
    《Redis深度历险》集群篇、拓展篇
    《Redis深度历险》原理篇
    《Redis深度历险》应用篇
    《鸟哥的Linux私房菜 基础篇》下
    Git使用
  • 原文地址:https://www.cnblogs.com/slayercat/p/CSharp_Service_PowerEvent_Needed_At_Windows8.html
Copyright © 2020-2023  润新知