我如何知道Windows是否刚从BSOD中恢复过来?

时间:2008-10-04 18:15:47

标签: windows wmi bsod

来自http://support.microsoft.com/kb/317277: 如果Windows XP由于严重错误而重新启动,则Windows错误报告工具会提示您...

我的应用程序如何知道“Windows XP因严重错误而重新启动”?

3 个答案:

答案 0 :(得分:8)

注意:对于 code-challenge

,这是一个很好的问题

以下是一些可执行代码,但可以随意添加其他语言的其他解决方案:


正常运行时间可能是一个很好的指示:

net stats workstation | find /i "since"

现在将该信息与读取Windows事件日志的方式相关联,例如在PowerShell中:

Get-EventLog -list | Where-Object {$_.logdisplayname -eq "System"}

查找最后一次“Save Dump”消息

作为Michael Petrotta saidWMI是检索该信息的好方法。

根据更新时间,您可以进行如下查询:

Set colEvents = objWMIService.ExecQuery _
    ("Select * from Win32_NTLogEvent Where LogFile = 'System' AND
    TimeWritten >= '" _
    & dtmStartDate & "' and TimeWritten < '" & dtmEndDate & "'")

轻松找到包含“Save Dump”消息的事件日志,确认崩溃。

Win32_NTLogEvent Class WMI课程中的更多内容。


实际上,这篇微软文章 Querying the Event Log for Stop Events 确实给了你(完整的请求):

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery _
     ("SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'System'" _
     & " AND SourceName = 'Save Dump'")
For Each objEvent in colLoggedEvents
    Wscript.Echo "Event date: " & objEvent.TimeGenerated
    Wscript.Echo "Description: " & objEvent.Message
Next

答案 1 :(得分:8)

在事件日志中报告由BSOD产生的重新启动。使用您喜欢的语言库来搜索日志中的错误。例如,在.NET中,您需要查看System.Diagnostics.EventLog类。 WMI可以提供更灵活的方式来搜索日志。

答案 2 :(得分:2)

如果已启用转储文件生成,则可以查找具有最近创建时间的内存或内核转储文件(或者,因为默认情况下它已启用,因此不会被禁用。)