是否有“引导会话ID”或(可靠)“引导时间戳”? 对于安装,我需要检测确实发生了计划的重新启动。
我想我可以用MoveFileEx()
做一个虚拟的MOVEFILE_DELAY_UNTIL_REBOOT
,但我确实希望能有更轻松的事情。
(我们必须安装第三方软件包,有时在修复/更新后行为不正常。在该状态下,访问设备甚至可能会锁定系统)
(Windows XP,Vista,7)
答案 0 :(得分:4)
对于这样的事情,WMI(Windows Management Instrumentation)通常是一个很好的起点。我知道您可以通过它直接获得当前正常运行时间,这可以让您确定最近是否重新启动了计算机。
以下是一篇包含一些代码示例的博客文章: http://blogs.technet.com/heyscriptingguy/archive/2004/09/07/how-can-i-tell-if-a-server-has-rebooted.aspx
根据您的实现语言,您可能只想从vbscript中提取查询代码。
答案 1 :(得分:3)
显然,Windows具有相当于“正常运行时间”的功能。以下是更多信息:http://support.microsoft.com/kb/555737
据我了解,这应该告诉你多久以前系统启动了。这些信息会解决您的问题吗?
答案 2 :(得分:1)
您可以从EventLog源搜索系统事件日志中的事件6009 - 这是每次重启后记录的第一个事件。
答案 3 :(得分:1)
我认为这里已经给出了最好的答案:Find out if computer rebooted since the last time my program ran?
这似乎是最简单的方法。使用GlobalFindAtom()
查看是否存在并使用GlobalAddAtom()
创建它,如果不存在的话。它将持续超出程序的执行。如果您的应用程序再次运行,并且看到原子存在,那么它不是自重新启动以来的第一次运行。
如果计算机重新启动,则原子将不存在,表明这是自重启以来第一次运行程序。