我如何获得Windows的最后重启原因


72

我想知道什么是Windows API函数(如果有),该函数提供有关上一次Windows重新启动源的信息。可能的三个主要原因:

  1. 电脑死于蓝屏
  2. 用户或程序关闭/重新启动计算机
  3. 断电

我可以获得的详细信息越多越好。但是,我至少需要从主要原因中了解原因。

我需要支持Windows Vista和Windows 7。

回答:

似乎没有直接的API可以获取该信息。相反,我们必须收集Windows事件日志。系统重启信息位于事件查看器/ Windows日志/系统中。这是事件ID提供的各种信息:

  • 6005:Windows启动
  • 6006:Windows关闭(正确)
  • 6008:Windows关闭(出乎意料)

我还没有断电和系统崩溃之间的区别,但这是一个好的开始。



3
这篇文章是关于C#的,我需要Windows API(C / C ++)
Frederic 2010年

Answers:


77

文章详细解释了如何找到最后一个启动/关机的原因。就我而言,这是由于Windows SCCM推送了更新,即使我已在本地将其禁用。请访问本文以获取有关图片的完整详细信息。作为参考,以下是从网站复制/粘贴的步骤:

  1. Windows+R键打开“运行”对话框,键入eventvwr.msc,然后按Enter

  2. 如果UAC提示,则单击/点击是(Windows 7/8)或继续(Vista)。

  3. 在“事件查看器”的左窗格中,双击/轻击Windows日志以将其展开,单击“系统”以将其选中,然后右键单击“ 系统”,然后单击/轻击“过滤当前日志”

  4. 请执行以下第5步或第6步,以获取您希望看到的关闭事件。

  5. 查看所有用户关闭计算机的日期和时间

    A)在“事件源”中,单击/点击下拉箭头,然后选中USER32复选框。

    B)在“所有事件ID”字段中,键入1074,然后单击/点击“确定”

    C)这将为您提供电源关闭(关闭)列表,并在“事件查看器”中间窗格顶部重新启动“关闭事件类型”。

    D)您可以滚动查看这些列出的事件,以关闭电源作为“关机类型”来查找事件。您将注意到日期和时间,以及列出的每次关机事件由哪个用户负责关闭计算机。

    E)转到步骤7。

  6. 查看所有意外关机的日期和时间

    A)在“所有事件ID”字段中,键入6008,然后单击/点击“确定”

    B)这将在Event Viewer的中间窗格顶部为您提供意外关闭事件的列表。您可以滚动浏览这些列出的事件,以查看每个事件的日期和时间。


完善。我将事件源过滤器与USER32一起使用,发现Dell Recovery正在重新引导系统。
最多

谢谢!过滤事件ID为6008的系统事件,列出了导致关机的严重事件。
Noam Manos

这本质上是仅链接的答案。万一链接变得不可访问,此答案将失去任何有用的信息。此外,OP正在请求API调用。您的链接通过一系列手动步骤导航用户,从而提供了答案。这不能解决所提出的问题。
IInspectable

这很奇怪..这告诉我管理员正在调用关机。最近它发生得更频繁了,并且注意到彼此之间每隔几分钟不止一次。我一定是被妥协了:(
Piotr Kula

如果系统由于错误检查/ BSOD而重新启动,则事件ID将为1001,而不是6008。此链接包含对您可能在Event Viewer中找到的不同错误检查代码的说明
aviraldg

17

看一下Event Log API。情况a)(蓝屏,用户切断了电源线或系统挂起)导致下次系统重新正确启动时,在“系统”事件日志中留下一条注释(“系统未正确关闭”或类似的东西)。您应该能够使用上述API以编程方式访问它(老实说,我从未使用过它,但是它应该可以工作)。


2
找到了它,它在系统事件日志中。
Frederic 2010年

3
我注意到当系统死机时会出现此消息:“系统已重新启动,没有先干净地关机。如果系统停止响应,崩溃或意外断电,则可能导致此错误。” 这似乎是一条通用消息。有人知道是否有办法区分蓝屏和系统冻结吗?
Luiz C.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.