注册表有了故障怎么办

软件世界

  注册表(Registry)是Windows用来保存系统信息的一个核心数据库,主要用来管理硬件设备、软件信息及系统设置等各项数据,在每次启动时,系统都会自动检测外部设备并与注册表中的数据进行对比,如果发现有硬件更改,系统会自动提醒用户安装或更新驱动程序,并同时更新注册表。

  正因为注册表存储了系统的核心信息,一旦注册表中的内容有所改变,会立即对系统产生影响,所以它的功能十分强大,利用它可以排除很多故障。

  同时,注册表本身又比较脆弱。在使用过程中,由于用户误操作、硬件故障、病毒感染、非法关机、软件冲突等原因,很容易对注册表带来“伤害”,轻者会导致某些硬件或应用程序无法使用,严重时甚至会导致系统崩溃。

  未雨绸缪──备份/恢复篇

  虽然注册表的变化会通过各种故障和出错提示反映出来,但是某些故障很小,很隐蔽,使得用户无法立即察觉,而当故障积累到一定程度,出现了设备不能正常初始化或Windows无法启动等严重问题时,注册表已“病入膏肓”,修复注册表已经成为一个“艰巨”的任务了。因此,未雨绸缪,对注册表进行备份非常必要。

  1.利用注册表编辑器的自身功能

  进入注册表编辑器,执行“文件→导出”命令,会看到图1所示的对话框,导出范围可以选择“全部”或某一分支,缺省保存为reg格式的文件,也可以保存为文本文件,如果考虑到兼容性,可以选择导出为“Win9x/NT4 注册文件”,这样就不用担心在Windows 9x/NT中的导入问题了。

  需要导入时,仍旧执行“文件→导入”命令,在弹出的对话框中找到事先导出的注册文件,然后按“打开”即可。

  2.利用系统备份数据

  由于注册表的重要性,因此Windows每次启动时会自动进行备份,这里简单介绍一下:

  (1)Windows 98

  Windows 98每次启动时都会自动运行注册表检查程序scanregw.exe,然后进行自动备份,备份时会将system.dat、user.dat、system.ini、win.ini四个文件打包成CAB格式,保存位置在“系统盘符\Windows\Sysbackup”文件夹中,缺省备份最近5个开机日的注册表数据,文件名按rb00x(x从0~3)进行编号。

  恢复时,启动至纯DOS环境,执行“scanreg”命令,选择“View backup”选项,此时会弹出图2所示的对话框,选择某一天的备份(注意应选择标注“Started”的项,而不是标注“NotStarted”的项),这样,很快就可以将注册表恢复到以前的某个状态。

  提示:这种方法适用于解决各种因系统文件损坏导致系统无法启动的错误,成功概率非常高,但缺点是可供选择的余地比较小,因此建议如果系统出现问题,请不要耽搁时间,抓紧时间施救。

  (2)Windows 2000/XP

  所有注册表数据全部存储在“系统盘符\Windows\system32\config”文件夹中,对某个用户而言,是“系统盘符\Documents and Settings\用户名”文件夹下的ntuser.dat文件。当Windows 2000/XP第一次成功启动时,系统会自动备份注册表,备份文件的位置是在“系统盘符\Windows\repair”文件夹,如图3所示。可以看到这里一共有10个文件,可惜这只是第一次启动时所备份的注册表数据,用处不是太大。

  恢复时只须在启动时按下F8键,选择“最后一次正确的配置”选项,这种方法可以解决绝大多数注册表错误。

  提示:不过这种方法只能还原“HKEY_LOCAL_MACHINE\System\ CurrentControlSet”分支下的内容,注册表中的其他更改均保持不变。

  3.手工实现

  对Windows 9x而言,只要将system.dat、user.dat两个文件定期备份到一个安全的地方,以后需要恢复时复制到原处(覆盖前需要去除原文件的隐藏、只读属性)。

  如果忘记了备份,那么可以复制system.1st、user.1st覆盖system.dat、user.dat。这两个文件是Windows 9x第一次启动时备份下来的注册表文件,不会随着时间而改变,不过,只能将注册表信息恢复到系统安装结束时的状态,因此实用性并不大。

  对Windows 2000/XP而言,只要将“系统盘符\Windows\system32\config”文件夹中的内容备份下来即可,对某个具体用户来说,只要将“系统盘符\Documents and Settings\用户名”文件夹下的ntuser.dat文件备份下来即可。

  小知识

  常见故障症状

  注册表遭破坏时出现的典型症状有:

  (1)当运行某些应用程序时,出现“找不到*.dll”或程序无法定位的提示信息。

  (2)应用程序出现“找不到服务器上的嵌入对象”或“找不到OLE控件”等出错提示。

  (3)当双击某一文档时,系统提示“找不到应用程序打开这种类型的文档”,但此时相关联的应用程序安装正确。

  (4)资源管理器中出现了无图标的文件夹、文件或其他奇怪的图标。

  (5)“开始”菜单或“控制面板”中的某些项目丢失或呈不可用状态。

  (6)某硬件设备被禁用或从设备管理器中无法找到。

  (7)Windows系统不能启动,或仅能以安全模式或MS-DOS模式启动

  当出现以上现象时,你可以尝试重新启动系统,或者启动到安全模式。如果是硬件问题可以先移除该设备,然后重新安装,目的是让操作系统重新检测该设备。如果仍无法解决问题,就应该考虑恢复注册表了。

  注册表家史

  1.Windows 3.x

  Windows 3.x中并没有注册表的概念,而是使用5个INI文件来记录系统配置信息,分别是system.ini、win.ini、control.ini(控制面板)、program.ini(程序管理)和winfile.ini(文件管理)。由于每种设备和每个应用程序都需要创建自己的INI文件,因此管理起来很不方便,而且还涉及到磁盘容量的问题,当时限定每个INI文件的大小在64KB之内。

  2.Windows 9x/Me

  从Windows 95开始,微软开始使用注册表这种二进制的数据库来集中管理并存储各种系统配置信息,注册表由system.dat、user.dat两个文件组成,保存在“系统盘符\Windows”文件夹中,前者保存了操作系统、硬件设备、软件设置信息,后者则保存着与用户有关的信息。如果你安装了系统策略编辑器,那么还会出现一个名为config.pol的文件。

  与INI文件不同,注册表不再有容量方面的限制,而且允许对硬件、系统参数、应用程序和设备驱动程序进行跟踪配置。虽然Windows的版本不断更新,但注册表却并没有发生质的变化。

  3.Windows 2000/XP

  Windows 2000/XP仍旧使用注册表来管理系统配置信息,不过Active Directory已开始承担某些与网络相关的任务,但这并不意味着注册表地位的降低。

  小技巧

  快速展开注册表所有分支

  当我们需要修改某一个分支下的键值时,常规的做法是逐个点击“+”号释放,十分麻烦。其实,只要选中相应的主键,然后按下Shift键和小键盘上的“”键,就可以快速展开其下的所有分支了。

  如何添加或删除键值

  找到需要添加键值的位置,从右键菜单中执行“新建”命令即可,双击可进行编辑,删除时直接按下Del键即可。

  谁也别想锁住我──解锁篇

  你也许遇到过这种情况:当你想使用注册表编辑器时,系统却弹出一个对话框,告诉你“注册表编辑已被管理员禁用”,这时怎么办呢?

  其实,这是由于分支“HKEY_CURRENT_USERS\Software\Micro soft\Windows\CurrentVersion\Policies\System”中的一个名为“DisableReg istryTools”的键在起作用,当该键的键值设置为1时表示禁止使用注册表编辑器,当设置为0时表示允许使用。

  1.导入解锁文件进行修复

  我们可以在记事本中输入下列内容,然后保存为REG文件,再双击该文件,将解锁信息导入注册表就可以了。

  REGEDIT4(如果是Windows 2000/XP系统,这行应该是“Windows Registry Editor Version 5.00”)

  (空行,不输入)

  [HKEY_CURRENT_USERS\Software\Microsoft\Windows\CurrentVersion\Policies\System]"DisableRegistry Tools"=dword:00000000]

  (空行,不输入)

  提示:括弧及里面的内容不输入。

  如果你不想输入这些长长的内容,也可以找到一台可以正常使用注册表编辑器的机器,找到分支“HKEY_CURRENT_USERS\Soft ware\Microsoft\Windows\CurrentVersion\Policies\System”,在右侧窗格中新建一个名为“DisableRegistryTools”的DWORD值,设置为0(表示允许使用注册表编辑器),然后导出该分支(注意,只是导出该分支,不是整个注册表),最后将导出的文件导入被锁定的机器即可。

  2.利用组策略进行修复

  操作注册表毕竟相当危险,而且可能连导入*.reg文件都被禁止,此时该怎么办呢?如果你使用的是Windows 2000/XP/2003,那么可以在“开始→运行”框中输入“gpedit.msc”打开组策略,然后依次展开“用户配置→管理模板→系统”,如图所示,在右侧窗格中双击“阻止访问注册表编辑工具”,在弹出的窗口中选择“已禁用”即可为注册表解锁。

  如果你使用的是Windows 9x,那么需要找出安装光盘,将“Tools\Reskit\Netamin\Poledit”文件夹中的所有文件复制到硬盘中的某个文件夹中,然后双击Poledit.exe即可启动系统策略编辑器,其他操作步骤同上。

  提示:如果系统禁止导入REG文件(一般是因为HKEY_CLASSES _ROOT\.reg的默认值“regfile”被更改为“txtfile”或其他类型),系统是Windows 9x,则我们可以将解锁文件保存为inf文件,然后右击该文件选择“安装”。如果系统是Windows 2000/XP,可以将它保存为vbs文件,双击它即可直接导入。

  3.利用专用工具进行修复

  如果不想手工导入REG文件进行解锁,那么可以选择杀毒软件厂商提供的免费工具来修复注册表,这些工具的功能都相当不错,只是注意在使用前要关闭系统中正在运行的屏幕弹出窗口或过滤软件,否则可能无法成功修复。

  瑞星注册表修复工具下载地址:http://it.rising.com.cn/service/tech nology/RegClean_download.htm

  金山毒霸注册表修复工具下载地址:http://www.duba.net/down load/3/8.shtml

  确保注册表安全

  有些朋友为了节约系统资源,会将注册表中的某些键值删除,如scanregw,其实这种行为完全是得不偿失的,因为这样很容易会因为没有及时备份而被迫重装系统。下面是笔者总结的几个好习惯,希望朋友们借鉴。

  1.用好杀毒软件的防护功能

  很多杀毒软件都提供了对注册表的监测功能,例如Norton AntiVirus 2004,它将通过IE修改注册表的代码定义为Trojan.Offensive,并且增加了Script Blocking功能,一旦发现类似的操作将自动进行拦截。

  2.锁定注册表

  其实,几乎所有恶意网站都是通过私自修改注册表来达到其不可告人的目的的,因此我们可以自己将注册表锁定,以免以后遇到尴尬事。

  打开注册表编辑器,定位至“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System”,如果没有发现“System”,那么请新建一个,然后在右侧窗格中新建一个双字节值(DWORD),命名为Dis ableRegistryTools,数值设置为1,表示锁定注册表编辑器。

  这样设置后,想再次进入注册表编辑器时,系统就会提示“注册表编辑已被管理员禁用”。以后你如果想解锁的话,可以参照前面的解锁方法进行解锁。

  3.禁用远程注册表操作服务

  对Windows 2000/XP用户,在“控制面板→管理工具→服务”中关闭“Remote Registry Service”服务,这样别人就无法远程修改你的注册表,安全性大大增强。

  4.慎用优化软件

  根据笔者的经验,应该尽可能不使用超级兔子、Windows优化大师等系统优化工具,因为这些优化工具无一不是通过修改注册表而实现某种功能。很多朋友在使用后都抱怨说这些优化软件在处理注册表时会自作主张删除掉一些有用的项。

  毕竟优化软件的开发者不太可能得到Windows操作系统的源代码,出现一些Bug也在所难免。因此从系统安全方面考虑,应该尽量少使用第三方软件对注册表进行优化。

  如果在优化注册表后出现错误,同样可以用本文介绍的方法对症下药。

  小知识

  常用键值

  正是由于注册表的重要性,微软不建议用户对注册表进行任何操作,其中一个明显的例证是:在“开始”菜单中找不到关于注册表的运行命令,只有在“开始→运行”对话框中键入“regedit.exe”(对于Windows 2000/XP还可以键入“regedt32.exe”),才能打开如图所示的注册表编辑器窗口。

  左侧窗格里有五个分支,每个分支都以HKEY开头,称为根键或主键,这是以Win32 API的Registry函数的关键字的符号变量为基础的,点击“+”号可以逐层展开,注册表中每一个键可以拥有多个子键,右侧窗格中显示的则是所选子键的键值(Value),键值可以分为字符串值、二进制值、DWORD值、多字符串值、可扩充字符串值等,平常所说的修改注册表其实就是修改键值。

  1.HKEY_CLASSES_ROOT

  它定义了系统中所有已经注册的文件扩展名、文件类型、文件图标等,还包括诸如我的电脑、网上邻居、控制面板、回收站等系统图标的类标志,此根键的数据适用于所有用户。这里内容最多的是系统中已经注册的各类文件的扩展名,每一个用圆点开始的子键表示一种文件类型,只有经过注册的扩展名,才能被系统自动关联。

  例如.txt,在右侧窗格中显示.txt对象的“Content Type”为文本文件,注册表称之为“txtfile”。

  2.HKEY_CURRENT_USER

  它保存了当前登录用户的配置信息,这里的大部分设置可以在控制面板中完成。

  3.HKEY_LOCAL_MACHINE

  它记录了本地计算机的所有软、硬件信息,当系统的配置和设置发生改变时,这里的键值会发生相应的变化,该主键的数据适用于所有用户。

  4.HKEY_USERS

  它保存了默认用户“.DEFAULT”、当前登录用户和软件信息,前面提到的“HKEY_CURRENT_USER”根键实际上就是“HKEY_USER\.Defalut”下面的内容。

  5.HKEY_CURRENT_CONFIG

  它记录了连接到本机上的所有硬件的配置数据,例如显示器、打印机、扫描仪的配置数据。

  如果是Windows 9x,那么还包括一个名为“HKEY_DYN_DATA”的根键,存储了系统性能和即插即用设备的动态信息。