不懂就要学--Windows注册表

起因

两个月前,因为觉得笔记本电脑启动速度太慢,将机械硬盘(HDD)换成了固态硬盘SSD,换固态硬盘的时候,商家在固态硬盘上预装了一个Win10操作系统,这个操作系统一直工作正常,直到上周的星期天早上,突然出问题了,现象是只要打开两个应用程序之后,电脑就会卡死,鼠标点击和键盘输入事件,均无响应。起初以为是笔记本电脑中毒了,用杀毒软件查杀了一下,问题依旧,打开任务管理器之后,才发现真正的罪魁祸首,是一个名为AppX Deployment Service的服务CPU和内存的占用率都很高,最高峰CPU占用率100%,内存占用10G多,下图是这个服务恢复到常态后的CPU和内存占用率,从图中可以看出,还是高得不正常。查了一下这个服务是Mircosoft Store依赖的一个服务,按照网上给出的解决方案,我关闭了Mircosoft Store自动更新功能,禁用了AppX Deployment Service服务,和修改了HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\AppXSvc值之后,发现系统重启之后根本不能接收用户的任何操作指令,就是想恢复启动AppX Deployment Service服务和修改注册表,也没法进行操作。最后只能买个Win10操作系统,重装系统解决问题。

引发的思考

重新系统是有代价的,花了将近一天,才把笔记本电脑的软件恢复到出事故之前的状态。这个代价促使我思考,为什么笔记本电脑用得好好的,怎么突然就冒出幺蛾子? 冒出幺蛾子之后,头脑中完全没有相关的知识储备,应对处理起来显得有些黔驴技穷。虽然我天天玩电脑,这件事让我觉得很多电脑知识自己还不懂,本着不懂就要学的精神,决定学习一下注册表的相关知识,现在我们进入正题。

注册表是什么?

注册表是windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心数据库,注册表记录了用户安装在计算机上的软件和每个程序的相互关联信息,它包括了计算机的硬件配置,包括自动配置的即插即用的设备和已有的各种设备说明、状态属性以及各种状态信息和数据。利用一个功能强大的注册表数据库来统一集中地管理系统硬件设施、软件配置等信息,从而方便了管理,增强了系统的稳定性。注册表中记录了用户安装在计算机上的软件和每个程序的相关信息,通过它可以控制硬件、软件、用户环境和操作系统界面的数据信息文件。注册表文件的数据信息保存在system.dat和user.dat中、利用regedit.exe程序能够存取注册表文件,通过注册表编辑器,可以更改系统设置、调整性能和解决问题。不正确的修改可能导致系统不稳定或无法启动,因此在使用注册表编辑器时要谨慎。我可能就是因为照着网上的教程错误的修改了HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\AppXSvc服务的值,导致系统运行不正常。

注册表的打开方式

按下Win+Q快捷键,输入注册表,点击注册表编辑器,就能打开

注册表编辑器说明

名称 说明
根键 以HKEY_XXX开头的, 根项下面每一项包含若干个文件夹和值
父项 相对子项而言,某一个子项的上一级就称之为它的父项(根键除外)
子项 在某一个项(父项)下面出现的项(子项)
值项 带有一个名称和一个值的有序值,每个项都可包括任何数量的值项,值项由三个部分组成:名称、数据类型和数据。

值项的名称,类型,数据说明如下:

  • 名称:不包括反斜线的字符、数字、代表符和空格的任意组合。同一键中不可有相同的名称
  • 数据类型:包括字符串、二进制和双字节等
  • 数据:值项的具体值,它的大小可以占用64KB

注册表的分类

分类 说明
HKEY_CLASSES_ROOT 该根键包括启动应用程序所需的全部信息,包括扩展名,应用程序与文档之间的关系,驱动程序名,DDE和OLE信息,类ID编号和应用程序与文档的图标等。
HKEY_CURRENT_USER 该根键包括当前登录用户的配置信息,包括环境变量,个人程序以及桌面设置等
HKEY_LOCAL_MACHINE 该根键包括本地计算机的系统信息,包括硬件和操作系统信息,安全数据和计算机专用的各类软件设置信息
HKEY_USERS 该根键包括计算机的所有用户使用的配置数据,这些数据只有在用户登录系统时才能访问。这些信息告诉系统当前用户使用的图标,激活的程序组,开始菜单的内容以及颜色,字体
HKEY_CURRENT_CONFIG 该根键包括当前硬件的配置信息,其中的信息是从HKEY_LOCAL_MACHINE中映射出来的。

虽然在注册表中,五大根键看着是并列关系,实际上,HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的信息都只是HKEY_LOCAL_MACHINE中信息的一部分,而HKEY_CURRENT_USER中存放的信息只是HKEY_USERS信息的一部分。 其实HKEY_LOCAL_MACHINE、 HKEY_USERS、这两个才是真正的注册表键,其他都是从某个分支映射出来的,相当于快捷键方式或是别名。我们重点了解一下HKEY_LOCAL_MACHINE和HKEY_USERS这两个注册表根键。

  • HKEY_LOCAL_MACHINE

此根键包括本地计算机的系统信息,硬件和操作系统信息,安全数据和计算机专用的各类软件设置信息,这个根键中存放的是用来控制系统和软件的设置,由于这些设置是针对那些使用Windows系统的用户而设置的,是一个公共配置信息,所以它与具体的用户没多大关系。

子项 说明
HARDWARE 该子项包括了系统使用的浮点处理器、串口等信息:ACPI:存放高级电源管理接口数据;DEVICEMAP 用于存放设备映射;DEscriptION:存放有系统信息
RESOURCEMAP 用于存放资源列表
SAM 这部分受保护无法查看
SECURITY 该子项只是为将来的高级功能而预留的
SOFTWARE 该子项中保留的是所有已安装的32位应用程序的信息,各个程序的控制信息分别安装在相应的子项中,由于不同的计算机安装的应用程序互不相同,因此这个子项下面的子项信息也不完全也一样
SYSTEM 该子项是启动时所需的信息和修复系统时所需要的信息:currentcontrol:保存了当前驱动程序控制集中的所有信息
  • HKEY_USERS

此根键包括计算机的所有用户使用的配置数据,这些数据只有在用户登录系统时才能访问。这些信息告诉系统当前用户使用的图标,激活的程序组,开始菜单的内容以及颜色,字体 此根键中保存的是默认用户(default),当前登录用户和软件(software)的信息,其中DEFAULT子项是其中最重要的,它的配置是针对未来将会被创建的新用户的。新用户根据默认用户的配置信息来生成自己的配置文件,该配置文件包括环境、屏幕和声音等多种信息,其中常用的3项是:

子项 说明
AppEvents 它包括了各种应用事件的列表:EventLabels:按字母顺序列表;Schemes:按时间分类列表
Control Panel 它包括内容与桌面、光标、键盘和鼠标等设置有关
Keyboard layout 用于键盘的布局(如语言的加载顺序等);Preload:语言的加载顺序;Substitutes:设置可替换的键盘语言布局;Toggle:用于选择键盘语言

注册表的备份与恢复

修改注册表之前,建议备份一下注册表,万一改坏了,产生的不良后果是:

  • 无法启动操作系统
  • 无法启动应用程序
  • 没有访问程序的权限
  • 网络连接不正常
  • Windows系统显示"注册表损坏"
  • 工作正常的硬件设备不再起作用或不再出现在"设备管理器"的列表中

备份注册表的方法是:选中整个数据库文件进行备份,或者单个根键,或项/子项,执行导出操作

注册表的恢复方法与之类似,选中整个数据库文件进行备份,或者单个根键,或项/子项,执行导入备份的注册表reg文件操作

注册表的优化

清理安装卸载时应用产生的垃圾信息

分别进入到HKEY_LOCAL_MACHINE\SOFTWARE 和 HKEY_CURRENT_USER\SOFTWARE 中,删除一些未知程序或者已经卸载的程序

系统安装时产生的无用信息
  • 删除多余时区 进入到"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"项下, 如果是大陆用户,除China Standard Time必须保留外,可以时区子项都可酌情删除。
  • 删除多余的语言代码

进入到"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Locale"项中 有两个不要清理 中文 - 0804 英语 - 0409,其余的按情况清理

  • 删除多余的键盘布局

进入到"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts",除了0804 中文简体-美式键盘布局需要保留外,其它可按情况进行删除。

自动关闭停止响应程序

进入到"HKEY_CURRENT_USER\Control Panel\Desktop" 项中找到AutoEndTasks值,把数值数据改为1即可

加快开关机速度

分别进入到HKEY_CURRENT_USER\Control Panel\Desktop 和 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control 项中 先在HKEY_CURRENT_USER\Control Panel\Desktop 项中找到HungAppTimeout字符串值和WaitToKillAppTimeout字符串值 如果没有的话就直接自己新建这两个值就好,找到这两个值之后先给HungAppTimeout的数值数据改为1000

把WaitToKillAppTimeout数值数据改为5000

再进入到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control 项中找到WaitToKillServiceTimeout字符串值 设置为5000

参数 说明
HungAppTimeout 作用是应用程序挂起等待时间,这个参数数值越小,应用程序关闭时越快
WaitToKillAppTimeout 作用是等待程序关闭的最大时间,也就是关机时一般都会有正在运行的app,这个时候如果超过程序关闭的最大时间,系统就会强制关闭app且直接关机
WaitToKillServiceTimeout 作用是等待终止服务超时(时间)。"服务"指 Windows 系统中的系统服务,每个启动的服务都占用一个进程,按道理来说数值设的越小关闭进程的速度就越快,但是不建议这样设置, 在系统关机时 "服务进程"需要有足够的时间将一些资料在系统结束前写回去,如果没有保留足够的缓冲时间,资料就会遗失

去掉桌面快捷方式上的小键头

进入HKEY_CLASSES_ROOT\Inkfile项,删除IsShortcut值项

结语

花了一天的时间,对注册表进行了扫盲,感觉收获还是比较多的。不禁感慨,有些知识在灾难没发生之前知道,就能完美避过。大到人生的道路如果曲折坎坷,小到做一件小事如果磕磕绊绊,多半是因为自己的认知和知识储备与遇到的难题相比,高度,广度与深度都不足,才让人生或事情处理起来显得很艰难,要想人生顺风顺水,或者做事情轻松顺畅,就得提前储备暂时还用不到的知识,要学到可以应用与生活或生产实践的程度。

相关推荐
何中应1 小时前
如何使用CMD命令启动应用程序(二)
windows·桌面应用·batch命令
sukalot2 小时前
windows C++-使用任务和 XML HTTP 请求进行连接(一)
c++·windows
ぃ扶摇ぅ2 小时前
Windows系统编程(三)进程与线程二
c++·windows
weixin_419349794 小时前
windows上安装python环境
windows
天上掉下来个程小白4 小时前
Stream流的中间方法
java·开发语言·windows
暮雪倾风5 小时前
【WPF开发】控件介绍-Grid(网格布局)
windows·wpf
sukalot6 小时前
windows C++-windows C++-使用任务和 XML HTTP 请求进行连接(二)
c++·windows
大道归简7 小时前
Docker 命令从入门到入门:从 Windows 到容器的完美类比
windows·docker·容器
没有余地 EliasJie7 小时前
Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT
pytorch·windows·深度学习·ubuntu·pycharm·conda·tensorflow
程序猿小D9 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa