2

我在使用 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 的事实有关?

请帮助我理解这个问题。提前致谢。

(这篇文章的原始版本有一个关于第二个问题的问题。原来这个问题与字符串中的额外双引号有关。我解决了这个问题,这个问题已经消失了。这就是为什么我删除了第二个问题从帖子)

陈杰

4

2 回答 2

1

我做了更多研究,问题如下:直到 2.4.9 版,Apache 启动例程已将“commonprogramfiles(x86)”映射到“commonprogramfiles_x86_”,并且该变量在环境中不存在,除非您创建它...我尚未对其进行测试,但创建该环境变量并将其指向与 commonprogramfiles(x86) 相同的位置也可能会解决此问题。

由于编译的 Apache 发行版仅使用我们所说的 2.4.46 版本,因此它们没有允许在环境变量中使用括号的修复程序。这就是为什么您仍然需要 PassEnv 指令来确保 Apache 将正确的值传递给 32 位 CGI 脚本。

以下帖子对此有一些有用的详细信息: https ://bz.apache.org/bugzilla/show_bug.cgi?id=46751

于 2021-03-18T08:40:44.540 回答
0

我曾经在使用 ADO-32 位的 dBase 编译应用程序的 Apache 2.4 中遇到同样的问题,因为 dBase 是 32 位的。最近发生了一些变化,可能是 Windows 10 2004 20H2。我在 2020 年 7 月至 8 月需要此修复程序,但现在不需要,环境变量已经存在。由于我的 Apache 版本是 2020 年 4 月发布的,因此这不是更改的原因。

我试图对此进行一些研究,但我能找到的只是这些环境变量是至少自 2017 年以来就存在的系统变量,所以为什么我需要设置这个 var 对我来说是个谜,但我想了解这一点,所以如果你发现了什么,请发布后续...

https://docs.microsoft.com/en-us/windows/deployment/usmt/usmt-recognized-environment-variables

于 2021-03-15T18:45:23.640 回答