我在使用 Apache/Perl 使用 Microsoft 数据访问组件 (MDAC) 访问 Excel 文件时遇到问题。不知何故,我必须设置“CommonProgramFiles(x86)”系统环境变量才能让它工作。否则,我不断收到此错误消息:
System.InvalidOperationException:.Net Framework 数据提供程序需要 Microsoft 数据访问组件 (MDAC)。请安装 Microsoft 数据访问组件 (MDAC) 版本 2.6 或更高版本。---> System.IO.FileNotFoundException:检索具有 CLSID {2206CDB2-19C1-11D1-89E0-00C04FD7A829} 的组件的 COM 类工厂失败,原因是以下错误:8007007e。
服务器配置为:
64 位 Windows Server 2008 R2
服务器安装了 Microsoft Access 数据库引擎 2010
Apache 2.2.25(即 32 位)
Perl 5.12.3 v5(也是 32 位的)
我有我的 Perl CGI 脚本来调用我的 C# 程序(这是为“任何 CPU”构建的)。
C# 程序使用 MDAC 打开和读取 Excel 文件(不尝试启动 Excel,仅尝试从 Excel 文件中读取数据)。
我已验证服务器在这 2 个文件夹中提供了最新的 MDAC:
C:\Program Files\Common Files\System\Ole DB
C:\Program Files (x86)\Common Files\System\Ole DB
我还检查了注册表,它们看起来很好。无论如何,直接在命令提示符下运行我的 C# 程序没有任何问题(它可以使用 MDAC 来访问 Excel 文件)。只有当我使用 Apache/Perl 来使用我的 Perl CGI 脚本来调用我的 C# 程序时(即当我收到 MDAC 错误时),我才会遇到问题。
我可以通过在我的 Perl CGI 脚本中指定 CommonProgramFiles(x86) 来解决这个问题,如下所示:
$ENV{ "CommonProgramFiles(x86)" } = "C:\\Program Files (x86)\\Common Files";
我有这个问题:
- 为什么我有这个问题?为什么设置 CommonProgramFiles(x86) 系统环境变量可以解决这个问题?为什么系统环境变量在我设置之前是空的?这是否与我在 64 位 Windows 操作系统中运行 32 位 Apache/Perl 的事实有关?
请帮助我理解这个问题。提前致谢。
(这篇文章的原始版本有一个关于第二个问题的问题。原来这个问题与字符串中的额外双引号有关。我解决了这个问题,这个问题已经消失了。这就是为什么我删除了第二个问题从帖子)
陈杰