Win10下Delphi/FireDAC无法识别同目录libmysql.dll求助
对应故障排查及解决方法
按故障出现概率从高到低排序排查即可:
- 优先检查VC++运行库依赖:这是重装Windows系统后出现该问题的最常见原因。目前主流版本的
libmysql.dll(尤其是MySQL 8.0及以上版本的官方驱动)采用动态编译,依赖VC++ 2015-2022运行库的msvcp140.dll、vcruntime140_1.dll等核心文件,系统缺失对应运行库时,Windows加载libmysql.dll会直接返回“依赖缺失”错误,FireDAC捕获后只会抛出“无法加载libmysql.dll”的提示,和找不到文件的报错完全一致,哪怕你把dll放在exe同目录、写绝对路径都没用。注意要安装和你程序架构一致的运行库版本:32位程序装x86版运行库,64位程序装x64版,装错架构依然会加载失败。 - 检查Windows文件锁定标记:重装系统后默认开启的附件管理功能,会给所有从网络下载、从压缩包解压的外来文件加上锁定标记,带标记的dll会被系统阻止加载,且不会弹出明确提示。操作方式:右键点击
libmysql.dll选择「属性」,在常规选项卡底部如果看到安全提示“此文件来自其他计算机,可能被阻止以帮助保护该计算机”,勾选旁边的「解除锁定」后点确定即可,同目录下的exe、dll文件都建议做一遍该操作。 - 检查安全软件拦截记录:打开Windows Defender的保护历史、第三方杀毒软件的隔离区,确认
libmysql.dll有没有被标记为风险程序隔离,如果有将对应文件加白名单恢复即可。 - 绕开FireDAC的自动dll搜索逻辑:你手动加
FDDrivers.ini没生效,大概率是配置格式不对或者被全局配置覆盖了,最稳妥的方式是在程序初始化段加一行代码强制指定驱动路径,完全绕开系统dll搜索顺序的坑:
// 确保引用FireDAC.Phys.MySQL单元 FDPhysMySQLDriverLink1.VendorLib := ExtractFilePath(ParamStr(0)) + 'libmysql.dll';
- 核对dll与程序的架构匹配性:32位编译的Delphi程序只能加载32位版
libmysql.dll,64位程序只能加载64位版,架构不匹配的报错和找不到dll完全一致,很容易误判,不要因为系统是64位就默认放64位dll。 - 排查系统组策略/镜像篡改问题:如果是第三方修改的Ghost版Win10镜像,可能默认修改了dll搜索策略、开启了驱动强制签名,可尝试在管理员权限的命令提示符中执行
bcdedit /set {current} disablepagingexecutive 0后重启设备再测试。
我个人遇到过至少8起完全相同的单设备故障,均为系统重装后未安装对应版本VC++运行库导致,安装完重启程序即可恢复正常,建议优先排查该点。
内容的提问来源于stack exchange,提问作者Dan Kelly
相关产品推荐
相关产品推荐

