我应该在系统或注册表的哪里查找有关 Windows 已重启次数的数据?我想创建一个使用此信息(自 OOBE* 过程以来 Windows 已重启次数)的应用程序来实现特定功能。
我确信微软可能在某个地方实现了这个功能。我正在考虑注册表项或类似的东西。
*OOBE - 开箱即用体验,这是您首次启动 Windows 并设置用户、密码和计算机名称时发生的过程。
答案1
每次启动和关闭都会记录在事件日志中。打开事件查看器,然后转到系统日志部分。如果您Filter Current Log
按事件编号 12 和 13 过滤这些记录(使用右侧的按钮),您应该只会收到系统关闭和启动时通知的事件。
事件 ID 12 表示系统启动,事件 ID 13 表示系统关闭。它还在事件本身中提供了记录事件的准确时间。
您可以让您的应用程序计算事件 ID 为 12 的事件数,这应该可以满足您的要求。
答案2
我找到了答案。
查找:
"HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\BootId"
您将看到的十进制值是系统已重启的次数。
答案3
这是另一种方法:SMART
如今,绝大多数硬盘都存储了 SMART 信息。您可能对以下两条信息感兴趣:04 启动/停止计数 12 电源循环计数
查看维基百科文章关于 SMART 以及可能的 smartmontools 文档。
smartmontools 是一个开源项目,可以在 CLI 中查询这些数据,或者还有其他程序可以通过各种 GUI 获取这些数据:维基百科 SMART 工具列表
答案4
我编写了两个简短的脚本,可以计算计算机开机的次数。
不幸的是,没有专门用于重启的事件日志,只有 Windows 启动和关闭时的事件日志。
这些脚本会搜索 Windows 启动时记录的事件日志event 12
。然后它会告诉您它已经计算了多少次。
VBS 脚本:计算计算机开机次数
count = 0
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent Where Logfile = 'System'" _
& " and EventCode = '12'")
For Each objEvent in colLoggedEvents
count = count + 1
Next
wscript.echo "Number of times operating system has started: " & count
VBS 脚本:远程计算计算机开机次数:
count = 0
strComputer=InputBox ("Enter the network name for the remote computer")
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent Where Logfile = 'System'" _
& " and EventCode = '12'")
For Each objEvent in colLoggedEvents
count = count + 1
Next
wscript.echo "Number of times operating system has started: " & count