注册表资料.docx
- 文档编号:25106428
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:126
- 大小:100.58KB
注册表资料.docx
《注册表资料.docx》由会员分享,可在线阅读,更多相关《注册表资料.docx(126页珍藏版)》请在冰豆网上搜索。
注册表资料
注册表regedit是在windows系统中处于核心地位的数据库。
问:
为什么Linux没有注册表?
为什么说注册表是万恶之源?
当初Window引入注册表基于如下考量:
1.统一访问接口。
传统的Windowsini配置文件和Linux下的文本配置文件的访问依赖于配置文件结构,有键值对形式的,有类似XML之类标记语言的,还有Json等等。
注册表就没有如此多样化差异。
2.提高访问速度。
注册表在硬盘上是以二进制树形结构存储,访问速度上有优势。
3.保护版权。
以前很多商业软件的验证信息会隐藏在注册表中,相比于Linux文本文件配置直白而言,注册表的二进制存储方式也在一定程度上增加了破解难度,保护了版权,鼓励软件开发者开发更多的Windows软件。
但是,Windows系统所有系统配置和定制化信息全寄托在注册表的完整基础之上。
然而注册表的迁移几乎是不可能的,所以Windows系统上软件的迁移十分不便。
带来了无数次重装系统后无数次再重装软件的痛苦。
系统备份也麻烦的多。
关于分散的文本文件和集中的注册表两种软件配置方式的优劣,目前仍有争论。
主流操作系统中,Linux操作系统一直使用单独的文本文件来存放配置信息。
而Windows平台下基于.NET框架的软件对注册表的依赖性也大大减弱。
事实上,.NET软件通常使用纯文本的XML(称为app.config)文档而不是注册表进行配置,这在某种意义上是向当初的ini文本配置方式的一种回归。
部分绿色软件支持者认为,集中式的注册表要求软件需要进行专门的安装步骤才可以正常运行,而单独的文本配置文档则可以不需要安装,只要将软件的文档目录拷贝过来就可以使用;当不再需要软件的时候,除删除相关文档外对于注册表也需要进行卸载步骤,才有可能不在系统中留下痕迹(很多软件即使提供了卸载步骤,仍然会留下痕迹),如果使用文本配置文档,则能做得更干净。
但是,文本配置方式导致某些系统软件的配置较为困难且缺乏统一的界面(如Linux中的情况),也是不争的事实,尽管现在已经有很多软件可以方便进行系统配置,但仍存在标准不够统一的问题。
著名开源软件Fetchmail的作者EricS.Raymond在《UNIX编程艺术》一书中有如下叙述:
对比terminfo数据库和Windows注册表,我们发现注册表出名地容易受到错误代码的破坏。
这可能会使整个系统都无法使用。
即使系统没有瘫痪,但如果破坏本身干扰了专用的注册表编辑工具,恢复工作就会很困难。
对比terminfo数据库和Windows注册表,我们发现注册表出名地容易受到错误代码的破坏。
这可能会使整个系统都无法使用。
即使系统没有瘫痪,但如果破坏本身干扰了专用的注册表编辑工具,恢复工作就会很困难。
从2000年以来部分恶性病毒如熊猫烧香等的破坏情形看,的确存在“破坏本身干扰注册表编辑器”的问题。
在某些情况下,病毒程序会监视系统进程列表,并强行关闭名为regedit的任何程序。
这使得受损用户难以直接通过编辑注册表进行恢复。
使用windows操作系统的缘故。
win系统的一大弊端,就是使用时间越长,容量越大,冗余的系统文件越来越多。
注册表过大就是直接来源,另外winsxs文件夹也会很大。
过多的垃圾文件,会导致系统响应变慢,因而使用起来感觉很卡。
解决办法就是重装系统,推荐半年重装一次,可以保证系统对使用性能的影响最小。
【李遥的回答(101票)】:
1.注册表实际上是一个层次型数据库,用来储存系统和应用的配置信息
2.虽然用文件储存配置信息是和注册表等价的,但是注册表有索引,值又是强类型的,所以性能比用文件快,而且占用资源小。
这在Windows早期是很重要的特性
3.软件卸载不干净是反安装程序没写好,和注册表无关。
同理,反安装程序忘删文件的话,也不能怪文件系统不好
对注册表出现的需求解释的很到位,但是,注册表最终还是作为二进制数据库保留下来,说明了Windows和 Unix 对待「performancehack」的不同态度。
Windows的态度是:
当年我需要,后来要兼容,就这样了。
Unix的态度就是慢慢从底层优化、替代,淘汰旧的机制,保留策略的可选择性。
卸载不能完全清除配置信息,是大型软件固有的问题。
Unix也不能说完全解决。
包依赖是某些Unix,特别是某些Linux发行版,对冗余的过分洁癖。
Redundencyisbad,dependencyisworse。
我先假设题主说的是unix是unix-like包含linux等把。
因为闭源的unix我实在是没用过,也没有发言权。
1.注册表和linux系的/etc基本是差不多的作用,都是用来存储系统及软件设置的地方。
至于存些什么,都是由应用软件自己决定的。
区别就是,一个是数据库,一个是目录树。
实质上并没有什么不同。
这是设计决策的问题。
linux偏爱文件系统,所以就用了文件系统而已。
题主所说的卸载不干净并不是注册表带来的问题,而是各种软件的installer脚本写得不够好的问题。
在linux下安装和卸载蹩脚的软件,同样也会有残留。
2.包依赖的问题这在各个平台下都有。
只不过谁做的早,谁做的晚。
windows的manifest也是为了这个解决这个问题而生的。
xp之前就是一团浆糊。
windows因为是大而全,由一家开发,发行周期长,更新慢,内容多,也不需要管理include和src,所以系统本身提供的类库依赖性天生就不需要用户担心(第三方类库依然是浆糊)
而linux系是由无数多的个人和小团体开发,慢慢被修改完善的,每个工具和库都有无数的版本,也都有自己以来的不同版本的包,再加上需要管理include和src,显得比较混乱。
但事实上,并没有哪个Linux软件会因为包版本问题而跑不起来。
也就是说,都是可以解决的。
所以我认为,linux系的包管理已经足够好了。
对初级用户来说,可以自动的在repo中解决大部分的依赖问题.这一点,windows显然是做不到的把?
【胡江的回答(6票)】:
Windows多用户系统及使用时,注册表使得各用户配置能相对独立,同时共用运行资源变得简单。
而Linux编译或安装文件时,运行、配置文件就像老母鸡下蛋一样,扔得到处都是。
【朴三世的回答(2票)】:
Windows是选择了用注册表,而不是它注定要用注册表。
Unix有自己的哲学,TA希望数据文件都是文本化的,这样程序间才可以互操作,而不用费力去解析二进制文件。
比如说搜索Unix内某用户的信息,可以用任何一种编辑器,vim,sed,emacs,甚至grep,cat,less等等。
要查看某进程的堆栈,同样是用这些工具。
但是用Windows的注册表的话,一般你只能使用
【注册表编辑器】或
【用户】等专用的程序来察看。
当然,注册表有自己的优点,我可以理解的优点就是速度快。
因为是二进制嘛~
包依赖可以理解为,额,.net里的dll?
你写.net程序时会注意到这个的。
但是Unix里的包不仅仅是链接库,是bin,lib,include,doc等等的打包。
【知乎用户的回答(0票)】:
win,因为当初win的几乎每个配置都要应用自己去检索和修改内容,这就需要每个应用都要自己实现读写配置的代码;且在win软件大量增加以后,各应用间共享配置的要求日益增多,所以就有了注册表。
unix有/etc目录树,因为*nix系列,有shell脚本,有n个工具,n*m个方法来检索和修改/etc中配置中的文本,所以一般没必要自己实现代码做这个,各应用配置内容格式虽然五花八门可存储格式一般都是txt。
不过linux的gnome就早已有了类似注册表的东西……
【海涛的回答(0票)】:
注册表,是微软的做法:
把所有配置都存在一个地方(树形数据库);
*nix的做法是:
每个应用自己有一套小的配置文件。
各有优劣:
前者统一存储,找起来方便,不容易遗漏,但是坏了后果严重(危及整个系统),想复制一个应用的配置,比较麻烦(有些应用的配置不仅仅是在一个分支里的);
后者各自配置,分散、凌乱,但坏了只影响自己(一个应用),复制一个应用的配置比较方便。
总的来说,还是*nix的做法更好一些。
因为备份所有配置的机会不多,恢复到别的电脑,意义不大。
复制个别应用的配置到另一台电脑的机会比较多。
win下的应用,直接使用配置文件也可以的,注册表出现前,就是都使用ini的。
我写的win下的应用,也是都使用ini的,尽量不注册表(除非是需要操作系统自动做什么)
这样的程序才绿色(即拷即用,即删即清)
【vczh的回答(18票)】:
注册表跟普通文件最大的区别就是,他是transactional的,就算你硬盘写了一半断电了,注册表本身的格式也不会被破坏。
你自己把配置维护在自己的文件里面,一不小心写挂了,就完了吧,你真的回去这么认真的做灾难恢复嘛,显然是不会的。
至于为什么注册表显得有点不好,这完全是因为windows自带了regedit,要是从一开始你就只能用api访问,那也没那么多菜鸟会去乱动然后怪windows的注册表了。
【滕金光的回答(1票)】:
Unix的一切都是文件。
【王鵬飛的回答(5票)】:
WINDOWS和类UNIX系统的设计哲学不一样。
WINDOWS不是微内核的,OS要全包全管,肯定有个统一存放配置信息的地方比较合理;UNIX是微内核的,内核之外全是“工具”,所以/etc下一堆东西。
工具们自己管好自己的事情,工具之间通过管道交互即可。
Windows是选择了用注册表,而不是它注定要用注册表。
Unix有自己的哲学,TA希望数据文件都是文本化的,这样程序间才可以互操作,而不用费力去解析二进制文件。
比如说搜索Unix内某用户的信息,可以用任何一种编辑器,vim,sed,emacs,甚至grep,cat,less等等。
要查看某进程的堆栈,同样是用这些工具。
但是用Windows的注册表的话,一般你只能使用【注册表编辑器】或【用户】等专用的程序来察看。
当然,注册表有自己的优点,我可以理解的优点就是速度快。
因为是二进制嘛~
包依赖可以理解为,额,.net里的dll?
你写.net程序时会注意到这个的。
但是Unix里的包不仅仅是链接库,是bin,lib,include,doc等等的打包。
WINDOWS和类UNIX系统的设计哲学不一样。
WINDOWS不是微内核的,OS要全包全管,肯定有个统一存放配置信息的地方比较合理;UNIX是微内核的,内核之外全是“工具”,所以/etc下一堆东西。
工具们自己管好自己的事情,工具之间通过管道交互即可。
包依赖可以理解为Windows的Dll,.net是一个虚拟机,是另外一回事,这些跟注册表完全两码事。
注册表是什么,作用是什么,有本书讲的很清楚,叫Windowsinternal。
unix为什么要有注册表?
win,因为当初win的几乎每个配置都要应用自己去检索和修改内容,这就需要每个应用都要自己实现读写配置的代码;且在win软件大量增加以后,各应用间共享配置的要求日益增多,所以就有了注册表。
unix有/etc目录树,因为*nix系列,有shell脚本,有n个工具,n*m个方法来检索和修改/etc中配置中的文本,所以一般没必要自己实现代码做这个,各应用配置内容格式虽然五花八门可存储格式一般都是txt。
不过linux的gnome就早已有了类似注册表的东西……
unix初期标准是配置文件,但是随着发展有些unix逐渐出现了类似win注册表的实现,比如aix上的odm就很像win的注册表,当然你还是可以用配置文件,不过用惯了smit就知道aix的好处了。
类似的还有hpux的sim.当然为了兼容性,配置文件不能去掉。
1,系统和软件需要存储来自各个用途的数据2,早期win大量采用的是.ini配置文件来存储这些信息,还有其他类型文件如.sys,现在还有大量程序使用
3,后来系统变大变复杂需要更加高效和结构化的存储结构,采用配置文件易损坏,不容易进行同步修改,及时更新使用......,配置文件碎片化等等问题,设计了注册表数据库来存储
4,没动过Unix,以Linux分析,Linux中一般会是.conf,.ini,.cfg,.程序名称,.rcxxxx,来存储系统或者软件需要的数据,简单的说,Linux没有一个标准的配置文件格式,也没有一个统一的配置存储位置,对于开发和管理员来说很麻烦...。
5,包依赖是说的模块引用关系,或者往小了说会是共享库(如dll)的依赖。
6,win上以前有个说话:
dll地狱,说的是后面安装的软件的共享dll替换了已有的dll,但是版本和接口又不一样了,导致其他使用此dll的软件挂掉。
后来很多软件学乖了,自己带一份共享库在自己的运行目录下.
7,Linux对共享库提供了基于版本的设计,防止版本冲突,提高模块重用。
应用程序和包管理器去检查共享库或者被引用模块的引用情况。
注册表知识大全(基础篇)
什么是注册表
注册表是一个庞大的数据库,用来存储计算机软硬件的各种配置数据。
它是针对32位硬件、驱动程序和应用设计的,考虑到与16位应用的兼容性,在32位系统中仍提供*.ini文件配置方式,一般情况下,32位应用最好不使用*.ini文件。
注册表中记录了用户安装在计算机上的软件和每个程序的相关信息,用户可以通过注册表调整软件的运行性能,检测和恢复系统错误,定制桌面等。
用户修改配置,只需要通过注册表编辑器,单击鼠标,即可轻松完成。
系统管理员还可以通过注册表来完成系统远程管理。
因而用户掌握了注册表,即掌握了对计算机配置的控制权,用户只需要通过注册表即可将自己计算机的工作状态调整到最佳。
Windows注册表也是帮助Windows操作系统控制硬件、软件、用户环境和操作系统界面的数据信息文件,注册表文件被包含在Windows操作系统目录下的两个文件:
system.dat和user.dat。
通过Windows操作系统目录下的regedit.exe程序能够存取注册表数据库。
在Windows95以前的更早版本中,这些功能是靠win.ini,system.ini和其他的应用程序有关联的.ini文件实现的。
在windows操作系统序列里,system.ini和win.ini这两个文件包含了操作系统的所有控制功能和应用程序的信息,system.ini管理计算机硬件,win.ini管理桌面和应用程序。
所有驱动、字体、设置和参数会保存在.ini文件中,任何新程序都会被记录在.ini文件里。
这些记录会在程序代码中被引用。
因为受win.ini和system.ini文件大小的限制,程序员添加辅助的.INI文件以用来控制更多的应用程序。
举例来说,微软的Word有一个word.ini文件,它包含着选项、设置、缺省参数和其他关系到Word运行正常的信息。
在system.ini和win.ini中只需要指出word.ini的路径和文件名即可。
在还是使用Dos和Win3.x操作系统的时代里,大部分的应用程序都采用了ini文件(初始化文件)来保存一些配置信息,如设置路径,环境变量等。
system.ini和win.ini控制着所有windows和应用程序的特征和存取方法,它在少数的用户和少数应用程序的环境中工作的很好。
随着应用程序的数目的不断增加和复杂性的日益增强,则需要在.ini文件中添加更多的参数项。
这样下来,在一个变化的环境中,在应用程序安装到系统中后,每个人都会更改.ini文件。
然而,几乎没有一个人在删除应用程序后删除.ini文件中的相关设置,所以system.ini和win.ini这个两个文件会变的越来越大。
每次增加的内容会导致系统性能越来越慢,在每次应用程序的升级都出现类似的难题:
升级后会增加更多的参数项但是从来不去掉旧的参数设置。
而且还有一个明显的问题,一个.ini文件的最大尺寸是64KB。
为了能够解决这个问题,软件商自己开始支持自己的.ini文件,然后指向特定的ini文件,这样下来多个.ini文件影响了系统正常的存取级别设置。
注册表最初被设计为一个应用程序的数据文件相关参考文件,最后扩展成对32位操作系统和应用程序包括了所有功能下的东西。
注册表是一套控制操作系统外表和如何响应外来事件工作的文件。
这些“事件”的范围从直接存取一个硬件设备到接口,如何响应特定用户到应用程序如何运行等。
注册表因它的目的和性质变的很复杂,它被设计为专门的针对32位应用程序工作,文件的大小被限制在大约40MB。
利用一个功能强大的注册表数据库来统一集中地管理系统硬件设施,软件配置等信息,从而方便了管理,增强了系统的稳定性。
综合以上可知,注册表(Registry)是Windows9x/Me/NT/2000操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”;也可以说是一个非常巨大的树状分层结构的数据库系统。
它记录了用户安装在机器上的软件和每个程序的相互关联信息;它包含了计算机的硬件配置,包括自动配置的即插即用的设备和已有的各种设备说明、状态属性以及各种状态信息和数据。
注册表产生的背景
在上个世纪90年代,计算机技术得到了飞速的发展,网络及操作系统的处理能力得到了不断的增强,新的可用计算机处理的信息也是接连不断,但是为了能更好地满足用户的需求,软件和硬件的开放性愈来愈强,大家能够按照自己的意志随意定制自己的系统。
操作系统的一个特点就是允许用户按照自己的要求对计算机系统的硬件和软件进行各种各样的配置。
早期的图形操作系统,如Win3.x中,对软硬件工作环境的配置是通过对扩展名为.ini的文件进行修改来完成的,但INI文件管理起来很不方便,因为每种设备或应用程序都得有自己的INI文件,并且在网络上难以实现远程访问。
为了克服上述这些问题,在Windows95及其后继版本中,采用了一种叫做“注册表”的数据库来统一进行管理,将各种信息资源集中起来并存储各种配置信息。
按照这一原则,Windows各版本中都采用了将应用程序和计算机系统全部配置信息容纳在一起的注册表,用来管理应用程序和文件的关联、硬件设备说明、状态属性以及各种状态信息和数据等。
注册表具有如下的一些特点:
1.注册表能够对硬件、系统的配置参数、各应用程序和各设备的驱动程序进行跟踪配置,使得修改某些设置后不再重新启动成为可能。
2.在注册表中登录的硬件某些数据可以支持高版本Windows即插即用的特性。
每当Windows检测到机器上有新的设备时,它就把有关数据存储到注册表中,另外,还可以避免新设备与原有设备间的资源冲突。
3.系统管理员和普通用户可以通过注册表编辑器在网络上检查系统的设置,使得远程管理能够实现。
在现在流行的WINDOWS操作系统便是能够让广大用户对自己的操作系统进行灵活配置并满足各种特定的需求。
在以前很早的WINDOWS3.x操作系统中,操作系统的配置信息都保存在.ini的文件中,例如SYSTEM.INI和WIN.INI,在系统初始化过程中打开这些文件,可对系统的软硬件进行各种各样的设置。
在这几年来,在同一台计算机上配置的硬件及所要运行的应用程序越来越多,可安装的应用程序也在不断增加,而在系统配置文件中需存储的配置信息自然也会随着增加。
这在某种程度上说是对系统配置文件的大小是个挑战,同时也在增加系统配置文件的管理难度。
对于这种情况,各应用厂家或硬件提供商开始提供自己的*.ini文件,每个应用程序或硬件设置都带有自己的配置文件。
随之带来的问题也就不用细说了,用户需要管理各种各样的*.ini文件,这对用户来说是非常的困难,况且这些文件都是存储在本机上,要实现远程管理是不可能的。
为了能够解决这些问题,在后续的WINDOWS95、98、NT和2000操作系统中,提供了一种管理配置信息的方法,也就是注册表的功能。
Windows的注册表实际上是一个数据库,它包含了五个方面的信息,即PC的全部硬件、软件设置、当前配置、动态状态及用户特定设置等内容,主要储存在C:
windows下的system.dat和user.dat两个文件中。
由此可见注册表是Windows系统的重中之重,稍有闪失,后果将是十分的严重。
在注册表中记录着用户安装在计算机上的软件和每一个程序的各种信息,用户能够通过注册表调整软件的运行性能。
用户也能够修改配置,只需要通过注册表编辑器就可以完成。
系统管理员还可以通过注册表来完成系统的远程管理。
因而用户掌握了注册表,就可以掌握对计算机配置的控制权,只需通过注册表即可将自己计算机的工作效率调整至最佳状态
如何访问注册表
登陆注册表编辑器其实是很容易的,打开"开始"菜单,点击"运行"项,然后在"运行"框中输入命令regedit就可以进入注册表编辑器了。
而注册表文件是以二进制方式存储的,所以不能使用传统的文本编辑器读写注册表中的数据。
为了方便灵活地管理注册表中的数据。
如果在WINDOWS95/98操作系统中,我们可以用REGEDIT.EXE访问注册表编辑器,而在WINDOWSNT/2000操作系统中也提供了REGEDIT.EXE和REGEDIT32.EXE两个版本的编辑器。
对大多数的使用者来讲,两者在基本上是一样的,只是设计的侧重点不同罢了。
REGEDIT32.EXE编辑器重点对安全程度要求较高的硬件数据进行编辑操作,而REGEDIT.EXE主要是侧重向用户使用的方便灵活方面进行了改进。
注册表的基本结构介绍
不论是WINDOWS95/98操作系统,还是WINDOWSNT/2000操作系统,其注册表的结构大体上是基本相同的,都是一种层叠式结构的复杂数据库,由键、子键、分支、值项和缺省值几部分组成。
注册表包括以下的5个主要键项:
1.HKDY_CLASSES_ROOT:
包含启动应用程序所需的全部信息,包括扩展名、应用程序与文档之间的关系、驱动程序名、DDE和OLE信息,类ID编号和应用程序与文档的图标等。
2.HKEY_CURRENT_USER:
包含当前登录用户的配置信息,包括环境变量、个人程序、桌面设置等。
3.HKEY_LOCAL_MACHINE:
包含本地计算机的系统信息,包括硬件和操作系统信息,如设备驱动程序,安全数据和计算机专用的各类软件设置信息。
4.HKEY_USERS:
包含计算机的所有用户使用的配置数据,这些数据只有在用户登录在系统上时方能访问。
这些信息告诉系统当前用户使用的图标、激活的程序组、开始菜单的内容以及颜色、字体等。
5.HKEY_CURRENT_CONFIG:
存放当前硬件的配置信息,其中的信息是从HKEY_LOCAL_MACHINE中映射出来的。
具体的说明请见如下的介绍:
一、HKEY_CLASSES_ROOT根键
HKEY_CLASSES_ROOT根键中记录的是Windows操作系统中所有数据文件的信息内容,主要记录了不同的文件的文件名后缀和与之对应的应用程序。
当用户双击一个文档时,系统可以通过这些信息启动相应的应用程序。
HKEY_CLASSES_ROOT根键是由多个子键组成的,可分为两种:
一种是已经注册的各类文件的扩展名,另一种是各种文件类型的有关信息。
由于该根键包含的子键数目最多,下面就用Avifile子键简要介绍它下面的子键的含义:
1.CLSID子键
Avifile子键下的第一个子键是“CLSID”,即“分类标识”
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 注册表 资料