标题:HOWTO: 解决 外部数据库驱动程序 (1) 中的意外错误 出处:gOxiA=苏繁=SuFan Blog 时间:Fri, 10 Nov 2017 15:14:42 +0000 作者:gOxiA 地址:https://goxia.maytide.net/read.php/1860.htm 内容: HOWTO: 解决 外部数据库驱动程序 (1) 中的意外错误 前几天遇到一个用户故障,Windows 7 系统运行一个第三方开发的打印小工具,之前运行正常,这几天总是在选择 Excel 文件后报错,导致无法正常打印。具体的报错提示“外部数据库驱动程序(1)中的意外错误”,如下图所示: 将该工具拷贝到我的环境下运行(Windows 10)也一样报错,即使设置兼容性模式也无济于事。用户反馈之前只更新过补丁,没有做过任何系统变更。为了快速定位根因所以先从补丁入手,经过测试基本锁定了三个更新补丁,后来在虚机测试环境下锁定了 KB4041678,并重现了故障。 在 KB4041678 中微软声明了该补丁存在已知问题,会导致基于Microsoft JET 数据库引擎(Microsoft Access 2007 和更低版本或非 Microsoft 应用程序)的应用程序无法创建或打开 Microsoft Excel.xls 文件。错误消息为“外部数据库驱动程序 (1) 中的意外错误。(Microsoft JET 数据库引擎)。” 微软提供的临时解决方案是下载并安装 Microsoft Access 数据库引擎 2010 可再发行软件包,然后在 Microsoft Excel 中修改 DB 连接字符串以将 ACE 用作提供程序。示例:将 Provider=Microsoft.Jet.OLEDB.4.0 更改为 Provider=Microsoft.ACE.OLEDB.12.0。 同时微软也正寻求一种解决方案,相信在不久的将来就会提供更新。但是,当下要解决用户问题,只能卸载 KB4041678,因为内网用户通过 WSUS 更新补丁,意味着将会有更多的用户遇到这个问题!是否可以找到被更新的文件做替换来解决这个故障呢?!尝试方法这样展开,先用 Application Verifier 和 WinDBG 去找验证这个应用程序,并截获断点。 结果是,Application Verifier 收集到的日志中,并未发现什么异常,反而在 WinDBG 中发现了断点,如下图所示在载入模块“msexcl40.dll”时出现了问题。检查文件日期确实是10月份有更新过,尝试用正常 Windows 7 环境下的 msexcl40.dll 对故障Windows 7 系统和 Windows 10 系统进行替换,故障解除! 使用 Process Monitor 抓包观察,发现 msexcl40.dll 开始到操作结束出现了一系列的错误,具体可参考下图。 Generated by Bo-blog 2.1.1 Release