【问题标题】:Identify a reboot识别重启
【发布时间】:2011-01-01 23:21:33
【问题描述】:

是否有任何“引导会话 ID”或(可靠的)“引导时间戳”? 对于安装,我需要检测确实发生了预定的重启。

我想我可以用MOVEFILE_DELAY_UNTIL_REBOOT 做一个虚拟的MoveFileEx(),但我确实希望更简单一些。

(我们必须安装一个在修复/更新后有时会出现异常行为的第三方包。在这种状态下,访问设备甚至可能会锁定系统)

(Windows XP、Vista、7)

【问题讨论】:

    标签: windows winapi boot


    【解决方案1】:

    对于这样的事情,WMI(Windows Management Instrumentation)通常是一个很好的起点。我知道您可以直接通过它获取当前的正常运行时间,这可以让您确定机器最近是否重新启动。

    这是一篇博客文章,其中也包含一些代码示例: http://blogs.technet.com/heyscriptingguy/archive/2004/09/07/how-can-i-tell-if-a-server-has-rebooted.aspx

    根据您的实现语言,您可能只想从 vbscript 中提取查询代码。

    【讨论】:

      【解决方案2】:

      显然 Windows 相当于“正常运行时间”。这里有更多信息:http://support.microsoft.com/kb/555737

      据我了解,这应该告诉您系统启动了多久。这些信息能解决您的问题吗?

      【讨论】:

      【解决方案3】:

      您可以在系统事件日志中从 EventLog 源中搜索事件 6009 - 这是每次重启后记录的第一个事件。

      【讨论】:

        【解决方案4】:

        我认为这里已经给出了最好的答案:Find out if computer rebooted since the last time my program ran?

        这似乎是最简单的方法。使用GlobalFindAtom() 查看它是否存在并创建它,如果不存在则使用GlobalAddAtom()。它会在你的程序执行之后持续存在。如果您的应用程序再次运行,并且看到原子存在,那么它不是自重启后的第一次运行。

        如果计算机重新启动,则原子将不存在,表明这是您的程序自重新启动后的第一次运行。

        【讨论】:

          猜你喜欢
          • 2012-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-14
          • 1970-01-01
          • 1970-01-01
          • 2014-09-22
          • 2021-09-19
          相关资源
          最近更新 更多