注册表是伴随着Win95出现在我们面前的,其实它早就在NT中担当起了重要的作用。采用注册表来管理系统配置,主要是为了提高系统的稳定性。而系统出现的一些问题(如无法启动、应用程序无法运行、系统工作不正常等),很多都是因注册表出现错误而造成的,通过修改相应的错误数据就能使得Windows工作如初了。但注册表的结构太复杂,不正确的修改常常会带来更坏的结果。下面介绍几种安全恢复注册表的方法,希望能帮助大家远离令人头疼的注册表问题。
未 雨 绸 缪 篇
Win9X系列操作系统的注册表,实际上是一个数据库,它以分层结构存储着整个计算机的系统配置以及大量应用程序的安装使用时要调用的各种信息等。它由3个相对独立的注册表文件组成:系统配置注册表文件:system.dat、用户平台配置注册表文件user.dat和网络管理注册表文件config.pol。它们存储在Windows目录中,其中system.dat中存储着当前计算机的配置,特别是各种即插即用设备的硬件配置,如设备的I/O地址、中断号(IRQ)以及DMA的值等;user.dat主要用来定义用户的优先权,存储着特定于某一用户的应用程序的安装信息等;而config.pol则是只有当Win98的用户安装了系统策略编辑器后才会生成的注册表文件,它存储的设置可以对网络用户的操作做出限制。一般而言,组成一个完整的注册表文件系统,system.dat和user.dat这两个文件是必不可少的。
一、文件备份还原法
显然,及时、正确的备份能够在计算机发生意外时,比较完全地恢复整个工作进程。对注册表进行的备份也一样,利用在正常工作状态下备份的注册表可以用来恢复发生错误的注册表,从而达到使系统重新恢复正常工作的目的。
(一)备份
1简单拷贝法
备份注册表就是备份system.dat和user.dat这两个文件。它们的文件属性都是系统、隐藏、只读的,因此一般情况下无论在DOS还是Windows窗口状态都是不可见的,在备份时要注意使用一些“技术”。
在DOS状态下,请先进入Windows目录,然后键入命令“Attrib -h -r -s system.dat”,对于user.dat同样操作,此时就可以将这两个文件复制到其他的目录中去了。
在Windows窗口状态下,在【查看】中选择【文件夹选项】→【查看】,在【隐藏文件】中选择【显示所有文件】,这样system.dat和user.dat才能在文件夹窗口中显示出来。剩下的复制工作应该就不用我多说了吧。
2注册表导出法
将注册表导出,也是一种不错的注册表备份方法。在【开始】→【运行】栏中运行【Regedit.exe】,选【注册表】→【导出注册表】,最后选择导出注册表文件的存储位置就可以了。要注意的,在导出注册表时,千万要在【导出范围】中选择【全部】,否则导出的注册表文件不完全,将无法用来恢复原注册表。采用此方法备份后只生成一个文件,它的文件名的后缀是.reg。
(二)还原
1简单拷贝法的还原
还原的方法当然是重新用备份的文件覆盖现有文件。不过要注意的是,在覆盖现有文件前,同样得先将system.dat和user.dat的文件属性全部取消,否则系统会拒绝覆盖操作。在还原前请务必启动到DOS状态下,然后再进行此操作。千万不要在Windows或Windows的DOS窗口下进行此还原操作,否则不但不能恢复注册表,反而会对注册表产生极大的破坏。
2注册表导出法的还原
利用注册表导出法的注册表文件还原系统时,既可以在Windows下进行,也可以在DOS下进行。
在Windows下进行时,运行注册表后选【注册表】→【导入注册表】,选择要导入注册表文件的所在位置,重新启动后就可以恢复注册表。虽然此法无论在安全模式还是正常方式下都可以进行,但为了保险起见,笔者还是建议最好在安全模式下或是干脆用下面介绍的在DOS下进行操作。
在DOS下只能以命令行的方式运行Regedit.exe,但它可以解决无法进入Windows情况下的注册表恢复问题。其命令行形式:
Regedit [/L: system] [/R: user] filename1
Regedit [/L: system] [/R: user] /C filename2
Regedit [/L: system] [/R: user] /E filename3 regpath1
Regedit [/L: system] [/R: user] /D regpath2
参数含义:
/L: system 指定system.dat文件的存放位置;
/R: user 指定user.dat文件的存放位置;
filename1 指定导入的注册表数据库文件名;
/C filename2 利用指定的注册表文件重新生成注册表;
/E filename3 导出注册表文件为指定文件名;
regpath1 将指定开始关键字的部分从注册表文件中导出;
/D regpath2 将指定开始关键字的部分从注册表文件中删除
具体在恢复注册表时,可以采取命令行1的形式:Regedit bak.reg(假设你导出的备份注册表文件为此文件名)。不过建议采用命令行2的形式,即:Regedit /C bak.reg,因为此命令不但会将bak.reg中的所有信息导入注册表,而且会将其中的一些无用的信息(如一些已经被删除的程序在注册表中的残留部分关键字等)同时剔除,从而达到压缩重建注册表的目的。
顺便提一下,命令行2也不一定要在恢复注册表才使用,平时运行也能压缩、清除注册表中的“垃圾”,从而起到提高Windows启动速度,减少注册表错误发生几率的作用。笔者就曾经利用此命令将原来6兆的注册表压缩为4兆。要注意的是,在使用此命令时,请务必在运行前加载磁盘缓冲smartdrv,否则它的运行时间之长或许足够你去看一场电影了!
二、系统备份法
正是由于注册表对于系统的重要性,微软在开发Win95时就考虑到系统对于注册表的自动备份问题。尽管它所提供的功能直到Win98才令人稍感满意,但毕竟这也不失为修复注册表的方法之一。
(一)Windows 95
当初Win95各版本中提供的系统自动备份注册表的方法比较简单,通常是在Windows系统启动的同时,将当前的注册表文件备份。具体的做法就是将system.dat和user.dat这两个文件分别备份为相同属性的system.da0和user.da0。因此,当系统因注册表遭破坏无法启动时,可以手工将system.da0和user.da0这两个文件拷贝并覆盖system.dat和user.dat(请注意在操作前,分别将这4个文件的文件属性全部取消)。尽管这种想法不错,但由于疏忽和一些无法预料情况的发生,系统自动备份的注册表经常会在不知不觉中被破坏或备份失败。例如:①当注册表的破坏是在上
次关机以前发生的,而当你再次启动系统时,备份的注册表其实就是已经遭破坏的注册表的“完全”拷贝了;②启动时注册表为正确的,此时系统自动备份的注册表也是好的,但在系统启动过程中发生意外(如突然停电、硬盘意外读写错误等)导致系统启动失败,当你再次启动时,原来完整的注册表备份也会被已经遭破坏的注册表覆盖。因此,利用system.da0和user.da0这两个备份文件来恢复注册表的效果不是十分令人满意,成功率一般在50%左右。要注意在一次启动失败后,尽量不要试图再次启动,应该立即用system.da0和user.da0这两个文件来覆盖恢复,否则90%以上你的系统是再也无法恢复的了。
(二)Windows 98
Win98对注册表文件备份系统的改进之处主要体现在以下两个方面:①备份文件不仅包括system.dat和user.dat,还包括了system.ini和win.ini这两个初始化文件,大大提高了系统还原的完整性;②备份文件被统一地压缩在一个文件中,而且备份压缩文件的数量大大增加,避免了在Win95下一个备份容易发生错误无法恢复的现象。
Win98将注册表的备份文件放在了Windows下面的隐藏子目录Sysbckup中,备份文件以rbX为名,都是CAB格式的压缩文件,每个文件包含system.dat、user.dat 、system.ini和win.ini。默认情况下,系统共留有5个(X从000到004,如果某次有错误,数字往后顺延)压缩包备份,这5个压缩包备份分别是你最近5个工作日中第一次启动计算机时系统所做的备份。请注意,并不是最近5次,举个例子,如果你每天都使用计算机,那么这5个备份中保存的分别是5天来每天你第一次启动计算机时的注册表文件。当某次启动发生错误时,系统会将这时的注册表文件另外保存为rbbad.cab,以供使用者分析、寻找发生错误的原因所在。
了解了Win98的备份原理后,对于注册表的还原就比较轻松了。如果你可以进入Windows(哪怕是安全模式),想进行备份还原的话,只要用Winzip等支持CAB压缩格式的软件选择最近的或是前几天的备份压缩包文件,并将其中的4个文件解压出来,重新启动计算机到DOS状态,利用这些文件覆盖相应同名文件就可以了。如果你在启动的时候就无法进入Windows的话,那么可以尝试在DOS下进行备份还原工作:①利用Windows提供的extract.exe文件,用命令行方式将备份文件展开,直接对系统注册表文件进行覆盖还原(假设当前目录为Windows):extract /Y . Sysbckup\ rbX.cab,其中X为000~004。②利用Windows附带的scanreg.exe,在DOS状态下运行此程序,按提示选择检查注册表,在程序检查完注册表后,可以看到【Create Backups】和【View Backups】这两项,前者用来将当前的注册表备份下来,后者用来查看以前备份的注册表情况。选择后者,屏幕将显示近日来的各备份注册表文件情况(主要是备份的时间),选择你想还原的备份,按回车,然后选择【Restore】开始还原,还原完毕后选择【Restart】重新启动计算机就可以了。
注意,当你第一次启动计算机失败后,请不要不断地继续尝试启动计算机,因为scanreg.exe会将启动失败的注册表都一一依次备份下来,如果你连续启动失败5次的话,也就意味着原先备份的5个完好的注册表都将被这连续5次的坏注册表所替代,也就失去了利用它们来还原系统注册表的机会。因此,在启动失败后,请尽量不要一而再再而三地连续启动,应及时地进行注册表还原工作。
亡 羊 补 牢 篇
古人云:亡羊补牢,为时未晚。如果你从来就没有备份注册表的习惯,或是在Windows下所有的系统自动备份都已经如前所述被已遭破坏的注册表文件所替代了的话,那么试试下面的方法,或许能使你的机器再次正常地运转起来。
一、保守还原法
一般而言,当Win9X在成功安装完毕后,会自动将第一次正常运行时的系统信息(其实也就是注册表信息,主要是相应的硬件信息)保存在C盘根目录下的system.1st这个文件中。利用它,有可能将系统恢复到最初安装时的状态。具体的做法如下:在DOS下,首先去除system.1st以及Windows目录下system.dat的文件属性(它们都是系统、只读、隐藏属性),然后将system. 1st拷贝为system.dat来覆盖系统的system.dat,最后重新启动计算机。如果启动成功,还得对系统进行大幅度地调整才能恢复到破坏前的状态。
二、“李代桃僵”法
如果有和你的硬件配置大致相同的计算机,可以用那台计算机上的注册表文件(system.dat和user.dat)来覆盖自己计算机上的注册表文件,然后启动。如果可以进入Windows,再对系统做相应的修改,就能恢复如初了。尽管这种方法成功的概率比较小(大约在25%左右),但这也是不得已而为之,或许能将你的“死马”真的医活了。
如果上面的招数对你都无效,那我再教你一记“超级绝招”——准备好你的Windows安装光盘,然后Setup吧!笔者凭着对注册表的了解(经常在里面修修改改)以及以上几大绝招,创造了自上年10月安装Win98至今没有重新安装的个人新记录。