- 问题概述:
- 问题具体描述:
- .Net应用中使用Crystal Reports 2008运行时(version 12.0)
- 导出Crystal Report到Excel或者RTF格式,出现“Invalid export DLL or export format”(无效导出DLL或导出格式)错误;
- 导出其他格式如Adobe PDF,Crystal Reports,doc或csv格式时没有错误;
- 问题原因:
- .Net应用程序无法加载Crystal Reports运行时DLL,请将Crystal Reports安装路径下的动态链接库目录加入系统环境变量的path,如安装在C盘Program Files 下,就将“C:\Program Files\Business Objects\BusinessObjects Enterprise 12.0\win32_x86”,加入path变量最后。
- 如果上述方法无法解决,则与libpng10.dll版本有关,Crystal Reports版本SP0和SP1中的libpng10.dll的版本有更改,在SP0中版本为1.0.30.0,SP1中版本为1.0.30.1,请确保应用程序中加载的libpng10.dll版本与Crystal Reports运行时版本相同。应用程序加载DLL按照以下顺序:
a)应用加载的目录;
b)system目录;
c)16位系统目录;
d)Windows目录;
e)当前目录;
依此检查以上目录,找出是否有libpng10.dll,并确保版本的一致性。f)PATH变量中列出的目录;
- 一种问题的可能情况:
开发环境和运行环境的Crystal Reports版本不一致,并且在开发的应用中包含了libpng10.dll。
libpng10.dll依赖关系
Version 1.0.30.0
- zlib.dll
- msvcr71.dll
- kernel32.dll
Version 1.0.30.1
- boezlib.dll
- msvcr80.dll
- kernel32.dll
主要不同是对zlib.dll和boezlib.dll的引用。
- 分析工具介绍:
Process Monitor 不仅结合了 Filemon(文件监视器) 和 Regmon(注册表监视器) 两个工具的功能,还具有以下一些增强:
• 监视进程和线程的启动和退出,包括退出状态代码
• 监视映像 (DLL 和内核模式驱动程序) 加载
• 捕获更多输入输出参数操作
• 非破坏性的过滤器允许你自行定义而不会丢失任何捕获的数据
• 捕获每一个线程操作的堆栈,使得可以在许多情况下识别一个操作的根源
• 可靠捕获进程详细信息,包括映像路径、命令行、完整性、用户和会话ID等等
• 完全可以自定义任何事件的属性列
• 过滤器可以设置为任何数据条件,包括未在当前视图中显示的
• 高级的日志机制,可记录上千万的事件,数GB的日志数据
• 进程树工具显示所有进程的关系
• 原生的日志格式,可将所有数据信息保存,让另一个 Process Monitor 实例加载
• 进程悬停提示,可方便的查看进程信息
• 详细的悬停提示信息让你方便的查看列中不能完整显示的信息
• 搜索可取消
• 系统引导时记录所有操作
在本次问题的分析中,利用该工具,有效分析出了应用中加载的动态链接库的情况,定位了问题所在。
- 参考资料: