【发布时间】:2008-10-04 18:15:47
【问题描述】:
来自http://support.microsoft.com/kb/317277: 如果 Windows XP 因严重错误而重新启动,Windows 错误报告工具会提示您...
我的应用如何知道“Windows XP 因严重错误而重新启动”?
【问题讨论】:
来自http://support.microsoft.com/kb/317277: 如果 Windows XP 因严重错误而重新启动,Windows 错误报告工具会提示您...
我的应用如何知道“Windows XP 因严重错误而重新启动”?
【问题讨论】:
注意:对于 code-challenge
,这是一个很好的问题这里有一些可执行代码,但您可以随意添加其他语言的解决方案:
正常运行时间可能是一个很好的指标:
net stats workstation | find /i "since"
现在将该信息与读取 Windows 事件日志的方法联系起来,例如在 PowerShell 中:
Get-EventLog -list | Where-Object {$_.logdisplayname -eq "System"}
然后查找最后的“Save Dump”消息
作为Michael Petrotta said,WMI 是检索该信息的好方法。
根据更新时间,可以查询如下:
Set colEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent Where LogFile = 'System' AND
TimeWritten >= '" _
& dtmStartDate & "' and TimeWritten < '" & dtmEndDate & "'")
轻松发现包含“Save Dump”消息的事件日志,确认崩溃。
Win32_NTLogEvent Class 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
【讨论】:
在事件日志中报告由 BSOD 导致的重新启动。使用您喜欢的语言的库来搜索日志以查找错误。例如,在 .NET 中,您需要查看 System.Diagnostics.EventLog 类。 WMI 可能会提供一种更灵活的方式来搜索日志。
【讨论】:
如果转储文件生成已启用(或者,由于默认情况下已启用,则未禁用),您可以查找具有最近创建时间的内存或内核转储文件。
【讨论】: