注册表
维库,知识与思想的自由文库
|
TA▼▲
注册表(Registry,繁体中文版Windows称之为登錄)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。
[编辑] 数据结构注册表由键(或称“项”)、子键(子项)和值项构成。一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。 在注册表编辑器(Regedit.exe)中,数据结构显示如下,其中,command键是open键的子键,(默认)表示该值是默认值,值名称为空,其数据类型为REG_SZ,数据值为%systemroot%/system32/NOTEPAD.EXE "%1 以上信息的意义是:txt类型的文件在右键菜单里的“打开”一项使用的程序是“NOTEPAD.EXE”,即用记事本打开文件。 [编辑] 数据类型注册表的数据类型主要有以下五种:
此外,注册表还有其他的数据类型,但是均不常用:
[编辑] 注册表的分支注册表有五个分支,下面是这五个分支的名称及作用:
[编辑] 注册表的存储方式注册表的存储位置随着Windows的版本变化而不同。尤其是Windows NT家族操作系统和Windows 95家族的存储方式有很大区别。注册表被分成多个文件存储,每一个文件被称为一个配置单元。 在早期的Windows 3.x系列中,注册表仅包含一个reg.dat文件,所存放的内容后来演变为HKEY_CLASSES_ROOT分支。 Windows NT家族的配置单元文件:
Windos95家族的配置文件
[编辑] 编辑注册表[编辑] 使用注册表编辑器Microsoft公司不推荐用户更改注册表,因为如果对注册表进行了修改,就有可能造成Windows系统的某些功能失效,甚至导致系统崩溃。但是,Microsoft公司仍然在Windows中提供了注册表编辑器,它位于%systemroot%\regedit.exe。在Windows NT中使用的则是界面有所不同的REGEDT32.exe。而在Windows 2000中,两个程序同时存在于系统中。部分的原因是Windows 2000版本的regedit.exe尚不支持对注册表数据设置安全性。但在Windows XP及以后的操作系统中,REGEDT32.exe已经消失。 [编辑] 使用脚本在Windows 98以后的操作系统中,增加了一个脚本语言解释器,可以用来执行一些系统任务。它可以支持VBScript和JavaScript两种脚本语言,都提供了访问注册表的功能。某些病毒就利用这一点通过修改注册表进行传播。 [编辑] 使用第三方或自行编写的软件访问注册表的系统功能对编程人员是开放的,因此有许多软件都有读写注册表的功能。事实上,Windows平台下开发的软件几乎都在不同程度上修改注册表,以便保存一些在程序多次运行之间需要保留的信息,以及让软件可以通过某种特定方式(例如,右键菜单)启动。也有一些软件是专门开发出来对注册表进行优化和设置的。 [编辑] 使用REG文件REG文件也是一种修改注册表的方式。它有着固定的格式,同时在系统中被关联到regedit.exe。REG文件提供了一种批量修改键值的方式,让用户无须在复杂的注册表结构中穿插,来更改键值,可以只写一个脚本,并且用注册表编辑器将其导入注册表就可以了。 [编辑] 历史[编辑] 前身最初,Windows系统及应用程序的信息被存储在后缀名为ini的文本文件中,这就是注册表的前身。但是这么做有着致命弱点:因为每一个程序都会新安装一个或多个ini文件,来存储程序信息,导致信息的分布极为零乱;而且在16位系统下,ini文件的大小必须在64KB之内。所以ini文件被认为不便于使用和管理。 [编辑] 发布与发展在最早出现于Windows 3.0的OLE技术出现后,微软为了存放系统中大量的软件组件信息,组织了一个reg.dat的数据库来存放这些信息。当时的注册表编辑器为16位版本的regedit.exe,功能较弱。 后来开发的Windows NT则更进一步使用相同的文件格式来存放系统的配置信息,以取代原有的ini文件。该系统为每一个用户在用户目录下创建了一个自身的注册表空间,而系统的设置被存放在系统文件夹中。由于Windows NT是一个32位操作系统,regedit.exe被升级为regedt32.exe,并增加了对权限的设置功能。 在Windows 95中,注册表首次得到广泛应用,逐渐淘汰了原有的ini文件。程序在安装时,不再将数据写入ini文件,而直接写入注册表。为了最大限度兼容旧程序,部分原来用于写入ini文件的专门API函数仍然可用,但现在是将信息写入注册表。Windows 95为了保持和Windows 3.x系列的兼容性,注册表的架构与Windows NT不同,为此专门开发了另一个32位版本的regedit.exe,它没有设置权限的功能。 在Windows 2000中,由于Windows 95家族已经深入人心,regedit.exe也得到广泛应用,相反regedt32.exe的界面相对比较丑陋,因此微软将windows 95系列的regedit.exe拿过来用。但由于移植过来的regedit.exe仍没有权限设置的功能,regedt32.exe仍然保留在系统中用作权限设置。 到Windows XP和Windows Server 2003中,regedit.exe已经增加了权限的功能,regedt32.exe由于失去作用而被剔除。同时,这个版本的注册表是64位的,这导致了一些兼容性问题,少数可以运行在旧版本Windows的程序在Windows XP中无法运作。 [编辑] 分散与集中之争关于分散的文本文件和集中的注册表两种软件配置方式的优劣,目前仍有争论。主流操作系统中,Linux操作系统一直使用单独的文本文件来存放配置信息。而Windows平台下基于.NET框架的软件对注册表的依赖性也大大减弱。事实上,.NET软件通常使用纯文本的XML(称为app.config)文件而不是注册表进行配置,这在某种意义上是向当初的ini文本配置方式的一种回归。部分绿色软件支持者认为,集中式的注册表要求软件需要进行专门的安装步骤才可以正常运行,而单独的文本配置文件则可以不需要安装,只要将软件的文件目录拷贝过来就可以使用;当不再需要软件的时候,注册表方式也需要进行卸载步骤,才有可能不在系统中留下痕迹(很多软件即使提供了卸载步骤,仍然会留下痕迹),如果使用文本配置文件,则能做得更干净。但是,文本配置方式导致某些系统软件的配置较为困难且缺乏统一的界面(如Linux中的情况),也是不争的事实,尽管现在已经有很多软件可以方便进行系统配置,但仍存在标准不够统一的问题。 著名开源软件Fetchmail的作者Eric S. Raymond在《UNIX编程艺术》一书中有如下叙述:
[编辑] 参考资料
[编辑] 参见 |



