Windows注册表的弊端

来源:互联网 发布:360浏览器 for mac版 编辑:程序博客网 时间:2024/04/28 10:11
Windows注册表的弊端
作者:Hookson          Email:Hookson@sohu.com
在Microsoft的Windows中,系统和应用程序的配置广泛的使用了注册表数据库,它在给系统带来很大的灵活性的同时也给一些另外的用户带来了很大的麻烦,下面来举例说明这一点。
1. 在Windows启动过程中,系统需要读取大量的注册表数据,它们都是以字符串的形式来寻值的,我们知道,注册表的子键层次很深,每次从根开始都有很大的时间开销。加上那些长度不算小的字符串比较操作,大大影响了系统的性能。最明显的一个影响就是系统启动速度减慢,WindowsXP的启动速度比Windows9x慢有一个重要的原因就是读取得注册表数据增多了。在配置稍落后的机器上,简直难以忍受。在启动方面我对Microsoft有一个建议,就是每次启动系统的时候不用每次都去初始化什么东西和判断运行环境什么东西,这在大部分情况下是多此一举的,其实我们的系统处于稳定的时候我们的硬件和软件都是不会有什么变化的,在这种情况下启动系统的时候我们只要把上一次离开系统的状态也就是内存中(包括虚拟内存)中的数据dump到硬盘上,下次启动的时候只要把dump的文件反过来dump到内存中,那就可以了嘛,也不必每次离开系统的时候都dump一下,只要有一次好的dump结果就行了,这样一来,那系统启动的速度一定会大大加快。当我们需要对系统配置作一些变动的时候我们再告诉系统,让它按古典的启动方式(暂且让我把现在的启动方式这样称呼吧)。时间是很宝贵的,如果我们世界上每个人每天都能节省一分钟,那每天就有一万多人年的工作机会,由此可见!
2. 一些恶意的程序可以任意的修改注册表,导致系统被做了非自愿的修改甚至导致系统崩溃,给用户带来不愉快甚至很大的损失,大部分的木马程序就是依靠在注册里修改特定的键值来繁衍生息的。如在
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/
RunServices
里加上自动启动;在HKEY_CLASSES_ROOT/<文件类型>里加上恶意的打开放式;限制用户的操作等等。
3. 系统所有的配置信息都放在一个数据库里面导致了不安全性,部分数据发生问题都会有可能导致整体的崩溃。如果一个磁盘扇区错误导致根键的发生问题,那么这个键下所有的子键都不可用了,虽然这种情况很少发生,但可能性是完全存在的,一旦发生结果非常严重。
4. 注册表的好处对普通用户体现不出来。由于注册表数据庞杂,普通用户对Windows系统的特性了解肤浅,普遍对注册表感觉有一点神秘,不敢擅自去编辑,同时系统提供给用户用来配置的应用程序也没有充分发挥注册表的威力,所以导致技术的存在而没有实用性,从而在浪费系统开销的同时并不能给用户带来好处。
5. 给程序移动和拷贝带来不必要的麻烦。通常的程序都会在注册表里注册自己的配置,离开这些配置,会导致程序无法正常运行。所以程序所在的文件夹路径一旦改变就会导致程序出错。把程序从一台机器拷贝到另一台机器时会发生更加严重的问题。在很多时候我们需要这样做,但是注册表的这个自身生来的弱点阻止了我们,所以我们不得不重新安装,浪费了宝贵的时间和精力。有时候又苦于没有安装程序,真是叫天不灵。要是手工来修改注册表项,那一是你不太清除到底应该修改那些,二是很多程序的注册表项极多,根本不可能修改的过来。
          (相应对策)待续…
2001年7月23日星期一



@ 2002.8.28 14:26 acev 发表评论 
我觉得Windows的启动速度比Linux快多了, 大家说是不是呀?

Linux启动时, 要启动许多东西 , 关闭系统时, 又要一大堆动作;

而Windows不是挺快的吗?

(希望不会被骂)
@ 2002.8.28 9:29 ixMind 发表评论 
系统信息暂时还是得用注册表,一些小软件可以用ini
@ 2002.8.28 8:41 li_hai 发表评论 
to notnoname
什么样的软件算绿色软件???
@ 2002.8.28 1:24 BlueTrees 发表评论 
注册表示一个很好的设计,他的思想是很可取的,使用注册表的优点
1、系统集中管理
2、可以授权,配置不同的用户的权限,而不是基于文件的授权
3、提高系统响应的时间,因为有缓存
4、给不同的软件提供一个一致的保存信息的结构
5、关键性的和com关系,如果没有注册表,com将无从实现,就将迫使用户寻找关键的com文件,这将是一个灾难
6、保留必须保留的易失数据,这也很关键,想象一下,一个对象需要保留中间状态,保留到文件?呵呵,麻烦,也会乱七八糟。
但他仍然曾在很多的问题,这需要改进,而不是抛弃,这种设计思想是绝对的优秀的
改进的方法
1、注册表不在基于文件系统,而是用其他的存储方式直接存放到硬盘
2、增强用户对注册表的控制能力,软件访问注册表需要授权,访问授权细化到某个部分,这样户可以建立专门的区域给某个特定的软件,而不是让软件自由的在注册表里面胡搞。
3、管理员配置用户可用区域
4、全局的系统信息也必须全部的按照不同的角色分开存放,虽然有点浪费空间,但是增强可靠性。病毒也可以少了很多,呵呵
5、管理员决定哪些内容是可以共享的。
@ 2002.8.27 21:0 gary_shi 发表评论 
to CoderNo1:
有些东西再争下去也没有什么太大的意义。至于ext2到底有没有defrag这个东西,我从来没有否认过,但是对于这个东西对于performance有多大的影响,在什么情况下有作用也请你自己去SEARCH一下。

UNIX是一个多用户的操作系统,对于任何一个应用程序来说,都需要分清到底他处于哪一个层次,到底需不需要去写/etc这个目录。如果是用户级的应用,那当然应该放到/home/xxx/etc下去。这和M$没区别?我倒是有点搞不懂了,想请你指教教了。

到底谁把谁当白痴,你自己心里有数。
@ 2002.8.27 15:57 pi1ot 发表评论 
我觉得注册表本身并不坏,但是被滥用了,很多用不着它的东西也被塞了进去。
unix那种分类的配置文件存放方式如果大家都遵守一定的规矩,也还算方便,比如说系统的放到/etc/,个人的放到~/,可是总有这样那样的不遵守约定的软件,于是我们就经常干一些找来找去就为了找一个字体配置文件之类的事情,就像windows下总有人往注册表里塞垃圾一样unix下也总有人把自己的程序的配置文件东藏西放。

我没看到有什么好的解决的办法,强制为一种标准的配置读写手段?怎么做到?总不能限制人家fopen,fread吧。
@ 2002.8.27 15:41 hanxiao2000 发表评论 
ok,我收回上面的话,但是我的意思是,如果您没有找到更好的解决方法之前,请不要这样子全盘否定注册表,unix没有注册表,但是您也看到了它的配置文件的无序性。
或者当windows基于dotnet环境之后,xml真的也成为注册表的代替品也说不定,看看现在的visual studio  .net就知道了,但是也仅是提供一种思路而已。
@ 2002.8.27 14:54 kingcom 发表评论 
MD...就知道批判...
@ 2002.8.27 14:47 zhengxionghua 发表评论 
to hanxiao2000
“没有更好的解决方法之前谈论这些是没有意义的”

请问,如果你不想,如果没有讨论
好的解决方案怎么会出来?
计算机是设计出来的,操作系统是设计出来的
现在的所有应用软件也都是设计出来的
我绝对不相信,你一个人的设计,在任何时候都能满足所有人的需求
所以你必须跟别人讨论!难道不是么?
当然,谈论只是讨论的一种形式,没不能没有!
@ 2002.8.27 14:43 gary_shi 发表评论 
re CodeNo1:
我再次提醒你,请你不要以MS角度考虑问题。你说NTFS有磁盘整理程序,那EXT2,EXT3就一定要有吗?我请你先查一下为什么FAT要有磁盘整理程序这个东西,为什么EXT2没有磁盘整理程序再说。

至于应用软件的多少,你说的多也只是桌面应用的多,说到企业应用,WINDOWS差远了。

对于应用程序装在哪儿,那更不是问题。用UNIX的人都知道去/etc下面去找配置文件,/usr/local/xxx/bin下去找执行文件,而不用关心到底是C盘,D盘,E盘....至于WINDOWS用户,要问他们把应用程序装哪儿了,拜托,他们连C盘,D盘,E盘都不知道怎么会事。

对了,为什么要有C,D,E,而UNIX却没有呢?UNIX以后会不会有C,D,E盘呢?
@ 2002.8.27 14:42 gary_shi 发表评论 
re CodeNo1:
我再次提醒你,请你不要以MS角度考虑问题。你说NTFS有磁盘整理程序,那EXT2,EXT3就一定要有吗?我请你先查一下为什么FAT要有磁盘整理程序这个东西,为什么EXT2没有磁盘整理程序再说。

至于应用软件的多少,你说的多也只是桌面应用的多,说到企业应用,WINDOWS差远了。

对于应用程序装在哪儿,那更不是问题。用UNIX的人都知道去/etc下面去找配置文件,/usr/local/xxx/bin下去找执行文件,而不用关心到底是C盘,D盘,E盘....至于WINDOWS用户,要问他们把应用程序装哪儿了,拜托,他们连C盘,D盘,E盘都不知道怎么会事。

对了,为什么要有C,D,E,而UNIX却没有呢...
@ 2002.8.27 13:27 clmate 发表评论 
写这篇文章的人是个白痴。
@ 2002.8.27 12:51 pi1ot 发表评论 
说什么unix下应用软件少得可怜的家伙。

我也不说你什么了,做好被围攻的准备吧。

哈哈。
@ 2002.8.27 12:42 Fishcat 发表评论 
现在我申明一点,我没有完全否定注册表的用处,我只是把注册表的问题提了出来,
我们的目的是解决这些问题,所以各位不用争吵.
   解决问题的办法是修改注册表的思想和结构,注册表在windows刚刚开始的时候带来的好处是明显的
但是现在已经朝着一个极端的方向发展,就是体积不断地增大.我们以后的系统会更大,应用程序会更多,
如果还按照我们现在的注册本思想,那不是一个恶梦吗?
   所以我们不应该把所有的配置都保存在注册表里头,系统的是系统的,应用程序的是应用程序的,MS是MS的,
IBM的是IBM的分得清清楚楚不是很好吗.要说程序间的合作,那当然要了.问题是这个合作不能把大家都往一个
麻袋里装啊,其实注册表里只要保存各个子配置的入口,思想就像COM一样,提供一个接口,那问题不是解决了吗!
@ 2002.8.27 12:16 CoderNO1 发表评论 
1)请问ext2有有磁盘碎片整理程序吗?记得以前NTFS也没有的,现在有了。
2)注册表的设计的确带来很多的麻烦(特别是多系统)。但不可否认他的集中管理方式也有一定的好处。Linux/Unix下的应用软件少得可怜,集中管理的必要性不太。但是Window系列就不一样,很多应用程序需要相互协作。就很简单的一个问题,某某软件安装了没有,及安装在那儿(因为你需要改其参数)?你如何知道,问用户(SB的作法,完全不管用户的感受),自已去找(用户以为你在format他的硬盘),最方便的做法是你的开放的参数让操作系统集中管理。你有更为方便的解决方法吗?


@ 2002.8.27 11:38 gary_shi 发表评论 
还有一点我前面忘记说了,启动速度不代表一切。

我碰到过这样的一件事,同一台机器机器配置PIII733+30G硬盘,在192内存的时候居然要比320M内存的时候要快(WIN 98)。
@ 2002.8.27 11:25 Fishcat 发表评论 
gary_shi说的好,我们不能把自己禁锢在别人的套子里.我们要有自己的思想.
看看注册表,从Windows98到xp,它的体积从不到10M增加到三四十M,备份一下
好半天.给人的感觉就好像是这样:一个礼品店,它不把礼品展列在礼品柜里
而是拿一个大麻袋,一股隆冬的把所有的东西都塞了进去,买的人来了,
老板装进麻袋,用一个"非常先进的检索算法"检索出顾客需要的东西,拿出来了
花的时间好像也不长..........
@ 2002.8.27 10:17 gary_shi 发表评论 
看来大家都是立足在WINDOWS的基础上在讨论问题。
其实有一点,我相信大家都是很有体会的,就是WINDOWS的机器越用越慢,刚刚装好机的时候,系统是很快的,而后就是越用越慢,就是因为什么东西都往里面面写,不分层次。其实我觉得系统启动参数和应用软件的参数完全是两个不同层次的东西,但却存在于一个注册表里。

前面的很多位朋友都是站在MS的角度在想问题,给MS的思维方式给弄坏掉了。记的有一个笑话说的是说UNIX新手问有没有磁盘碎片整理程序。

前面有位朋友说,系统启动的时候还不能用XML之类的东西,从某种程度上是没有错。但注册表里的信息很多是在系统启动以后才用的,也就是说,在启动的时候为了读取这些目前还用不到的信息浪费很多的资源,同时,在启动以后,一些硬件信息对于应用程序来说又是不用再去读取的。究其原因,仍然是前面所说的,运行级别不分,乱轰轰的写成一堆东西,造成系统性能下降。

其实楼主没说明白是一个安全问题,他只说到了由于系统注册表给恶意程序更改或是部分损坏的情况。被恶意JS更改是大家最头痛的问题,我也碰到过N次,但也没办法了,用了MS的东西就要放弃部安全性,这是大家公认的了。部分损坏问题还不大,因为总是有备份的。
安全性的问题还不止于此,因为注册表是全局的配置文件,任何一个用户用他的改动都可能造成系统完蛋,这在多用环境里是不可接受的。我在这个方面看到的资料也不多,因此我也不下结论了。
@ 2002.8.27 9:55 Fishcat 发表评论 
zpplayer:你不了解才说幼稚,请多想想吧,不是这么简单的.
@ 2002.8.27 9:45 zpplayer 发表评论 
弱智&幼稚&.....
@ 2002.8.27 9:3 CoderNO1 发表评论 
1)如julyclyde所说,XP的启动在很多人的机子上是最快的。所以其后面怎么说都站不住脚的。
2)DUMP到内存中,你可以休眠的呀?正常的启动就是为了稳定。
3)注册表给很多程序员很大的自由度。现在绿色软件不是有很多的吗?但是有的程序员水平低,有事没事地用注册表,那当然会出事。但是有的程序其配置很复杂,是需要配置数据的,复杂的情况下INI的比注册表好吗?
4)注册表是不给普通用户使用的,你看到regedit是放在系统工具里吗?用户一般情况下无必要知道其存在。

@ 2002.8.26 22:32 complexity 发表评论 
注册表纯粹是因为缺乏一致的二进制对象规范,以及缺乏对象命名和查找机制的一种临时替代品。

等系统有了完善的底层对象支持,例如象.net实现的那样,注册表终究是要淘汰的
@ 2002.8.26 22:6 hanxiao2000 发表评论 
坚决不同,意搂主的说法,注册表有些弊端没错,但是没有更好的解决方法之前谈论这些是没有意义的
曾经想过如果用xml存储信息多好,然后再仔细一想,如果是在启动的时候那根本没有办法解析xml嘛,那个时候,只能用最原始的字符串。
@ 2002.8.26 21:44 Fishcat 发表评论 
to julyclyde:在我们这里的机器上是这样的
@ 2002.8.26 17:4 tonytan 发表评论 
不用注册表,用什么呢?用ini文件, rc文件?
下次别关机,选等待,或休眠,不就可以了吗?
当然,程序老要安装不太好,拷贝就可以用是
最好的,像java系统就还可以,但是也要perperties
文件呀
@ 2002.8.26 16:45 Lostinet 发表评论 
哈,还说不判断呢。。。好啊,反正启动不起来,不要赖注册表。。
@ 2002.8.26 15:7 notnoname 发表评论 
注册表是个失败的体系!哈哈~~~~~现在强调绿色软件!
@ 2002.8.26 12:47 julyclyde 发表评论 
WindowsXP的启动速度比Windows9x慢??
原创粉丝点击