如何找出Windows 7重新启动的频率?


18

我应该在系统或注册表上的哪个位置查找有关Windows重新启动多少次的数据?我想创建一个使用此信息的应用程序(自OOBE *进程以来Windows已重启了多少次)来实现特定功能。

我确信微软可能已经在某个地方实现了这一点。我在考虑一个注册表项或类似的东西。

* OOBE-开箱即用体验,这是您首次启动Windows并设置用户名,密码和计算机名时发生的过程。


通过仔细阅读事件日志,您可以弄清楚这一点,但是我认为它实际上并不是专门记录在某个地方的……嗯。希望我错了!
井2011年

Answers:


17

每次启动和关闭都记录在事件日志中。打开事件查看器,然后转到系统日志部分。如果Filter Current Log按事件编号12和13 过滤这些记录(使用右侧的按钮),则只应获取通知系统关闭和启动的事件。

事件ID 12是系统正在启动,事件ID 13是系统正在关闭。它还提供了事件在事件本身中记录的确切时间。

您可以让您的应用程序对事件ID为12的事件进行计数,这应该可以为您提供所需的信息。


5
很好的想法,但有一些警告:事件日志可以由用户清除,并且它们限制为最大大小,因此它不一定报告重新启动的总数,尤其是如果是旧安装。
rmart

@rmart我不知道普通用户是否会清除事件日志,但是它们都是公平的。我认为使用如上所述的SMART数据可能是一种更好的方法,但这并非没有警告。
康纳W

12

我找到了答案。

查找:

"HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\BootId" 

您将看到的十进制值是系统已重新引导的次数。


576次,非常有趣的问答。向我+1。
乔·泰勒

7

这是另一种方式:SMART

如今,绝大多数硬盘驱动器都存储SMART信息。您可能会对以下两项信息感兴趣:04 Start / Stop Count 12 Power Cycle Count

请查看有关SMART 的Wikipedia文章,还可以查看smartmontools的文档。

smartmontools是一个开源项目,可以在CLI中查询此数据,或者周围还有其他程序可以使用各种GUI来获取此数据:Wikipedia SMART工具列表


我认为这可能是比使用事件查看器更可靠的方法,但是也有一些警告。除非从第一天起该驱动器就位于同一台计算机上,而没有在其他地方进行更改或使用,否则您将无法获得准确的结果。另外,我认为较旧的驱动器不完全支持S..MART,因此您可能会发现一些驱动器记录了电源循环信息,而另一些则不。
康纳·W

@Connor W:我猜想那种不记录SMART信息的硬盘不太可能放在功能强大的,足以运行Windows 7的机器上,但是是的,您完全可以做到这一点。依靠。就像事件查看器....
camster342

如果用户使用待机模式还是硬盘驱动器由于不活动而关闭了,该怎么办?
sinni800 2011年

@Sinni:那就是04和12代码之间的区别。04是总的硬盘驱动器加速,其中包括待机和省电模式。12是硬盘驱动器因PC关机或进入休眠状态而完全断电的地方。
camster342 2011年

2

在Windows 7中检出可靠性管理器


3
但是,这并不能真正告诉您计算机何时启动或关闭。
康纳W

1

我写了两个简短的脚本,它们可以计算计算机打开的次数。

不幸的是,没有用于重启的事件日志,仅用于Windows启动和关闭时的事件日志。

这些脚本搜索event 12Windows启动时记录的事件日志。然后,它告诉您已计数了多少次。

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 

VBS脚本–计数计算机已打开的次数


如果这是您要链接的网站(刚刚更新的那些链接),请注意,您必须披露与该网站的隶属关系。请参阅superuser.com/help/behavior
slhck

@slhck-是的,我引用的是我的个人博客。我不知道这些规则。我是否应该使用一条标准线来明确说明我所引用的内容也在我的个人博客上?我很久以前发布所有答案时,我正在更改域名,并希望在域过期之前更新链接。我运行我的个人博客来记录我需要记住的事情并分享知识,从而在超级用户之间进行交叉发布。
ovann86

1
请明确地说出“我的博客”之类的内容。只要你确保实际的答案都包含在这里,不与人离开的网站获得一个解决方案,它的罚款。添加链接以获取详细信息总是可以的。
slhck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.