troubleshooting

  

HOWTO: 解决 外部数据库驱动程序 (1) 中的意外错误

  

        前几天遇到一个用户故障,Windows 7 系统运行一个第三方开发的打印小工具,之前运行正常,这几天总是在选择 Excel 文件后报错,导致无法正常打印。具体的报错提示“外部数据库驱动程序(1)中的意外错误”,如下图所示:

  

Snipaste_2017-11-10_13-18-27

  

        将该工具拷贝到我的环境下运行(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 系统进行替换,故障解除!

  

Snipaste_2017-11-10_13-28-20

  

        使用 Process Monitor 抓包观察,发现 msexcl40.dll 开始到操作结束出现了一系列的错误,具体可参考下图。

  

Snipaste_2017-11-10_15-06-00

  

Snipaste_2017-11-10_15-05-18

Windows Client | 评论(0) | 引用(0) | 阅读(181)
发表评论
昵称 [注册]
密码 游客无需密码
网址
电邮
打开HTML 打开UBB 打开表情 隐藏 记住我