DLL系统文件冲突的解决

软件世界

相信很多朋友都有过这样的经历,安装了某些软件,在运行这些软件的时候,Windows系统总是提示XXX.DLL出现不明问题而不能运行或出错,轻则软件不能运行,重则导致Windows系统崩溃。遇到这种问题,我们该怎么解决呢?其实大部分此类问题是因为支持这些软件运行的DLL文件与系统自身的DLL文件发生了冲突,让我们来看看如何解决这种问题。

分析问题

为了说明问题,我们需要先了解Windows系统的另一种可执行文件.DLL,DLL是Dynamic Link Library(动态链接库)的缩写,是Windows的基础(所有的API函数都是在DLL中实现的)。它本身并没有程序逻辑,是由多个功能函数构成,不能独立运行,必须由其他进程加载并调用。因此我们可以得到结论:在安装这些“问题”软件的时候,它们把系统里一些DLL文件用自身所带的新版本或旧版本的DLL文件覆盖了,这样能够保证它自身的正常运行。但问题是系统里的其他一些软件和系统本身可能还需要以前版本的DLL文件才能正常运行,现在的文件版本变了,出错就在所难免了。
通过以上的分析,笔者觉得如果能把不同版本的DLL文件都放在同一个系统里,使不同的软件调用不同版本的DLL文件,相互之间不干扰,这样这些软件就可以和平共处了。接下来笔者就开始着手解决让两个不同版本的DLL在一个系统中共存的问题。

解决方法

我们以IBM语音识别系统4.0版为例,这个软件在Windows 98第一版中一直运行良好,但安装在Windows 98第二版中就会出现问题。表现为使用该软件后系统中的其他软件如IE、OE、记事本会报“KERNEL32.dll和OLEAUT32.DLL还有MFC42.DLL发现不明问题无法使用”的错误信息,这就是明显的DLL系统文件冲突问题。发生冲突的DLL文件是kernel32.dll、oleaut32.dll和mfc42.dll这三个文件。这时我们可以到X:\Windows\system(x为Windows所在盘符)中找到这三个文件并把它们复制下来(有些文件可能是隐藏属性的,请先去掉文件的隐藏属性),接下来就是最关键的地方了,每个安装的软件在自己的根文件夹里一般都有一个用来存放DLL文件的专门文件夹,文件夹的名字不定,要自己找。IBM语音识别系统的这个文件夹是X:\ViaVoice中的bin文件夹,把刚才复制的三个文件粘贴到这个文件夹里。然后用系统文件检查器(依次点击“开始→程序→附件→系统工具→系统信息→工具→系统文件检查器”即可打开)选择从安装光盘提取一个文件,把上面的三个文件分别指定到你要恢复的系统文件框里(注意:恢复的时候要使用Windows安装光盘)。点击开始,在“还原自”里填写你的Windows安装盘地址,在“将文件保存到”里写x:\Windows\system,然后点击确定开始恢复文件。这样我们就可以恢复IE、OE、记事本这些软件所需的DLL文件了。重新启动计算机后,以前不能运行的软件又可以正常运行了。

总结

除了语音识别系统外,其他很多的软件都可以用这种方法来解决DLL冲突的问题,成功与否主要是看你能不能找到这个软件在根文件夹中用来存放DLL文件的文件夹。这些软件启动的时候一般都是首先从这个文件夹里寻找它们所需的DLL文件,然后才到Windows系统里的SYSTEM文件夹中寻找。因此我们就可以将不同版本的DLL文件放在同一系统里供不同软件调用了。