找不到dll问题之第三课《其它篇》
除了Visual C++运行库和DirectX运行库,其余找不到dll问题一般可以通过重装报错exe对应软件解决。
根据错误弹窗标题的exe文件名,以及Everything软件搜索exe文件名得知的文件路径,还不行就再查看exe属性详细信息描述和数字签名,根据这些判断exe所属软件,卸载或重新安装。
有时候可以用Everything搜索下问题dll,看exe同目录下是否存在该dll,又或者在别的路径有。
除此之外还有下面几种原因:
一、压缩包里的游戏或软件,没有解压的前提下直接压缩包里双击打开,会出现找不到dll的错误。
因为除了极个别解压软件会在你双击压缩包里的某个文件时自动解压全部文件,剩下大部分解压软件只会解压你双击的exe文件到临时目录,其余dll还留在压缩包里,这就导致解压的exe文件找不到压缩包里其余dll。
二、有些人在装好软件后,在桌面没看到快捷方式,就自作聪明去软件目录把主程序exe剪切到桌面打开,然后就是报错找不到dll。
正确的做法应该是右击主程序exe,发送到,桌面快捷方式,而不是将exe剪切移动到桌面。
三、电脑上的杀毒软件误报将软件的dll当病毒杀掉了。
检查杀毒软件查杀记录或隔离区可以看到,恢复并添加信任即可,前提你很确定那不是病毒(可以上传Virustotal检查判断)。
四、电脑中了病毒(以白加黑木马居多)、又或者流氓软件,相关dll被清理后启动项残留还在。
解决方法是根据错误弹窗标题exe,用Autoruns启动项管理软件,软件主界面过滤器框填exe名,可以看到相关启动项,取消勾选或删掉。对startup里非lnk快捷方式启动项无效。
又或者问题exe不是开机启动,是由别的exe启动项调用时,需要通过火绒自定义执行规则找出元凶。对资源管理器dll启动项执行的exe无效。
五、一些防泄密软件驱动,可能会拦截每个启动的进程,注入代码加载自己的dll。当防泄密软件只剩下残留驱动时,可能会出现报错找不到防泄密软件的dll。
卸载报错软件后重装了依旧报错时可以考虑是这个原因。用ARK工具查看内核回调驱动或删除loadimage回调测试可以找出问题驱动。
六、exe目录里存在报错dll,且dll正常,依旧提示找不到dll,可能是exe当前路径被篡改导致。
有些exe会获取当前路径加载某个dll,而当前路径被篡改时可能会报错找不到dll。比如某讯飞语音输入法就有过这个毛病,把别的exe当前目录设置成输入法目录,导致报错找不到存在的dll。
七、某些加壳加密的exe有bug,某些系统下可能会出现找不到存在的dll。
八、软件打开时报错找不到某个不属于软件的dll。除了上面说的防泄密软件外,还可能是软件加载的第三方插件损坏(以office类软件常见),删除相关插件即可。
又或者是中了感染型病毒,看exe数字签名是否存在且正常可以判断(前提exe原本有数字签名,大厂软件一般都有)。
是不是运行库dll,可以在我之前发的两篇文章里搜索dll文件名得知;是不是系统dll,可以在原版系统里搜索得知;是不是第三方软件或驱动的dll,可以百度得知,或者网上下载dll后看数字签名和详细信息得知。