【问题标题】:How can I get the Windows last reboot reason如何获取 Windows 上次重启的原因
【发布时间】:2011-01-09 13:14:37
【问题描述】:

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

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

越详细越好。但是,我至少需要知道主要是哪个原因。

我需要支持 Windows Vista 和 Windows 7。

答案:

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

  • 6005:Windows 启动
  • 6006:Windows 关闭(正确)
  • 6008:Windows 关闭(意外)

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

【问题讨论】:

标签: windows winapi shutdown reboot


【解决方案1】:

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

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

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

  3. Event Viewer的左侧窗格中,双击/点击Windows Logs将其展开,点击System将其选中,然后右键单击 系统,然后点击/点击过滤当前日志

  4. 执行下面的第 5 步或第 6 步,了解您希望看到的关闭事件。

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

    A) 在事件源中,单击/点按下拉箭头并选中USER32 框。

    B) 在 All Event IDs 字段中,输入1074,然后点击/点击OK

    C) 这将为您提供电源关闭(关机)和重启的列表 关闭事件查看器中间窗格顶部的事件类型。

    D) 您可以滚动浏览这些列出的事件以查找事件 关机类型为关机。您会注意到日期和 时间,以及每个用户负责关闭计算机的原因 列出关机事件。

    E) 转到第 7 步。

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

    A.在所有事件 ID 字段中输入 6008,然后单击/点击确定

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

  7. 完成后,您可以关闭事件查看器。


其他有用的事件 ID (source)

ID Description
41 The system has rebooted without cleanly shutting down first.
1074 The system has been shutdown properly by a user or process.
1076 Follows after Event ID 6008 and means that the first user with shutdown privileges logged on to the server after an unexpected restart or shutdown and specified the cause.
6005 The Event Log service was started. Indicates the system startup.
6006 The Event Log service was stopped. Indicates the proper system shutdown.
6008 The previous system shutdown was unexpected.
6009 The operating system version detected at the system startup.
6013 The system uptime in seconds.

【讨论】:

  • 完美。我将事件源过滤器与 USER32 一起使用,发现戴尔恢复正在重新启动我的系统。
  • 谢谢!过滤事件 ID 为 6008 的系统事件,列出导致关机的关键事件。
  • 这本质上是一个仅链接的答案。如果链接无法访问,则此答案将缺少任何有用的信息。此外,OP 正在请求 API 调用。您的链接通过引导用户完成一系列手动步骤来提供答案。这并不构成对所提出问题的解决方案。
  • 这很奇怪.. 它告诉我管理员正在调用关机。最近这种情况发生得更频繁,并且在几分钟后注意到甚至不止一次。我一定是被妥协了:(
  • 如果系统因错误检查/蓝屏而重新启动,则事件 ID 将为 1001,而不是 6008。This link contains explanations of the different bugcheck codes you might find in the Event Viewer
【解决方案2】:

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

【讨论】:

  • 找到了,在系统事件日志中。
  • 我注意到系统死机时出现此消息:“系统已重新启动,但未先完全关闭。如果系统停止响应、崩溃或意外断电,可能会导致此错误。 "这似乎是一条通用信息。有谁知道是否有办法区分蓝屏和系统冻结?
猜你喜欢
  • 2018-03-30
  • 2012-10-26
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
相关资源
最近更新 更多