4

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

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

4

3 回答 3

8

注意:这是一个代码挑战的好问题

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


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

net stats workstation | find /i "since"

现在将这些信息与读取 Windows 事件日志的方法联系起来,例如在 PowerShell 中:

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

并查找最后的“保存转储”消息

正如Michael Petrotta 所说WMI是检索该信息的好方法。

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

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

轻松发现带有“ Save Dump”消息的事件日志,确认崩溃。

更多在Win32_NTLogEventClass WMI 类中。


实际上,这篇 Microsoft 文章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
于 2008-10-04T18:36:23.753 回答
8

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

于 2008-10-04T18:38:54.230 回答
2

如果转储文件生成已启用(或者更确切地说,由于默认情况下已启用,则未禁用),您可以查找具有最近创建时间的内存或内核转储文件。

于 2008-10-04T18:18:07.253 回答