2011-12-30 140 views
4

我遇到了一個奇怪的問題。我正在開發一個連接到Oracle數據庫的基於Windows的應用程序。無法加載DLL「OraOps10.dll」

對於初始測試,我創建了安裝程序並在我擁有的不同機器上進行了測試。每臺機器都安裝了Oracle客戶端,並且在運行應用程序時我沒有看到任何問題。

但是,當我與客戶共享此安裝程序時,他出現錯誤「無法加載DLL OraOps10.dll」。當被問及時,他提到並已經在他的機器上安裝了Oracle Client,並且他能夠運行連接到Oracle數據庫的其他C#應用程序。

我不明白爲什麼我的應用程序只會出現以上錯誤。我甚至試過在https://forums.oracle.com/forums/thread.jspa?threadID=67364分享的建議,但仍然沒有運氣。

我甚至試圖在客戶機器上手動複製可執行文件&。但仍面臨同樣的問題。

所以請幫助我還能做些什麼。

感謝&問候
Sudhakar Chavali

P.S:

我使用Windows XP操作系統和客戶也使用相同的操作系統。兩臺機器都是32位操作系統。

這是客戶的oracle客戶端的安裝位置: C:\ oracle \ product \ 10.2.0 \ client_1 \ bin,同樣也是我的情況。

我們都使用Oracle 10g。

+1

啓用融合日誌(http://stackoverflow.com/questions/255669/how-to-enable-assembly-bind-failure-logging-fusion-in-net),看看它試圖搜索的組件和爲什麼它可能無法加載 – ChrisWue 2011-12-30 20:22:50

+0

融合日誌記錄在過去幫助我調試ODP.NET的問題。但是,在這種情況下,似乎.NET部分工作正常,並且在嘗試查找本機DLL時發生錯誤。 Fusion日誌可能在這裏沒有幫助。 – Codo 2011-12-30 22:04:02

+0

真正愚蠢的問題(tm):在故障機器上的PATH中是c:\ oracle \ product \ 10.2.0 \ client_1 \ bin? – 2011-12-31 22:48:54

回答

9

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客戶端安裝了什麼目錄?你能看到正確的註冊表項嗎?

0

我懷疑整個Oracle客戶端沒有安裝,或者安裝了早期版本。

您應該讓客戶驗證安裝的Oracle客戶端版本是否與您的版本匹配,並且安裝了整個客戶端,而不僅僅是.Net部分。

0

你可以在這個問題上拋出一些更多的信息,比如目標操作系統是32位還是64位。嘗試生成x86和64位安裝程序,並檢查您的客戶機。如果沒有,Oracle客戶端可能無法正確安裝在客戶端PC中。這些問題處理起來有點棘手。嘗試在其他方向看它。

2

至於我,我得到Unable to load DLL "OraOps12.dll"錯誤消息。

這是一個Web應用程序,而我使用的是Oracle XE。 Web應用程序(客戶端應用程序)和Oracle XE數據庫服務器都安裝在同一臺計算機上。

甲骨文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客戶端。

我稍後會發佈一個更詳細的解釋,一旦我自由。