【问题标题】:Unable to load DLL “OraOps10.dll”无法加载 DLL “OraOps10.dll”
【发布时间】:2012-01-30 19:17:59
【问题描述】:

我遇到了一个特殊的问题。我正在开发一个连接到 Oracle 数据库的基于 Windows 的应用程序。

对于初始测试,我创建了安装程序并在我拥有的不同机器上进行了测试。每台机器都安装了 Oracle 客户端,我在运行应用程序时没有发现任何问题。

但是当我与客户共享此安装程序时,他收到错误“无法加载 DLL OraOps10.dll”。当被问及时,他提到并展示了在他的机器上安装的 Oracle 客户端,并且他能够运行连接到 Oracle 数据库的其他 C# 应用程序。

我不明白为什么我的应用程序只会出现上述错误。我什至尝试了在https://forums.oracle.com/forums/thread.jspa?threadID=67364 上分享的建议,但仍然没有运气。

我什至尝试在客户的机器上手动复制可执行文件和 DLL。但仍然面临同样的问题。

所以请帮我看看我还能做什么。

感谢和最好的问候
苏达卡尔·查瓦利

附注:

我使用的是 Windows XP 操作系统,客户也使用相同的操作系统。两台机器都只有 32 位操作系统。

这是客户的 oracle 客户端安装的位置: C:\oracle\product\10.2.0\client_1\bin 也是我的版本。

我们都在使用 Oracle 10g。

【问题讨论】:

  • 启用 Fusion 日志记录 (stackoverflow.com/questions/255669/…) 以查看它尝试搜索程序集的位置以及它可能无法加载的原因
  • Fusion 日志记录过去曾帮助我调试 ODP.NET 的问题。但是,在这种情况下,.NET 部分似乎工作正常,并且在尝试定位本机 DLL 时发生错误。 Fusion logging 在这里可能无济于事。
  • 真正愚蠢的问题 (tm):c:\oracle\product\10.2.0\client_1\bin 在故障机器的 PATH 中吗?

标签: c# oracle odp.net winforms-interop


【解决方案1】:

ODP.NET 驱动程序基本上由两部分组成。 .NET 部分和本机 OCI 部分。错误消息表明 .NET 部分正在工作,但无法加载本机部分。

这些问题可能是原因:

  • .NET 部分和本机部分之间存在版本不匹配。请注意,OraOps10.dll 属于 Oracle 10g。所以.NET 部分显然是版本 10,它正在寻找版本 10 的原生部分。

  • 可能存在位数不匹配。如果 .NET 部分在 64 位模式下运行,它将寻找 64 位本机 OCI DLL。在 64 位系统上,任务管理器可以告诉您进程是 32 位还是 64 位。 32 位进程用*32 标记。

  • 注册表可能不包含指向本机 DLL 的正确路径。 ODP.NET 将检索 HKEY_LOCAL_MACHINE\Software\Oracle\ODP.NET\2.xxx.x.x\DllPath 的值以定位 OCI DLL。请注意,注册表分为 32 位和 64 位部分。根据查看注册表的进程,它会得到不同的值。

最好将所有可用信息添加到您的问题中。它是 64 位操作系统吗?它是 32 位还是 64 位进程?安装了哪个版本的 Oracle 客户端? Oracle 客户端安装在哪个目录?你能看到正确的注册表项吗?

【讨论】:

    【解决方案2】:

    至于我,我收到了Unable to load DLL "OraOps12.dll" 错误消息。

    这是一个 Web 应用程序,我使用的是 Oracle XE。 Web 应用程序(客户端应用程序)和 Oracle XE 数据库服务器都安装在同一台机器上。

    Oracle XE 数据库服务器带有自己的 Oracle 11 客户端,但 ASP.NET MVC Web 应用程序使用的是 Oracle 12 客户端。即使我在机器上安装了Oracle 12即时客户端,ASP.NET MVC网站也看不到它,它一直在抱怨“无法加载DLL OraOps12.dll”。

    我需要做的是编辑HKLM\Software\Oracle\ODP.NET\DllPath 处的注册表以指向 Oracle 12 即时客户端,而不是随 Oracle XE 一起安装的 Oracle 11 客户端。

    等有空我会发布更详细的解释。

    【讨论】:

      【解决方案3】:

      我怀疑要么没有安装整个 Oracle 客户端,要么安装了早期版本。

      您应该让客户验证安装的 Oracle 客户端版本是否与您的版本相匹配,并且安装了整个客户端,而不仅仅是 .Net 部分。

      【讨论】:

        【解决方案4】:

        您能否进一步说明一下这个问题,例如目标操作系统是 32 位还是 64 位。尝试生成 x86 和 64 位安装程序并检查您的客户端计算机。如果不是,Oracle 客户端可能没有正确安装在客户端 PC 中。这些问题处理起来有点棘手。试着从其他方向看。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-10
          • 2012-01-12
          相关资源
          最近更新 更多