簡體   English   中英

DllImport生成System.DllNotFoundException

[英]DllImport generates System.DllNotFoundException

我在嘗試從我的應用程序中使用非托管代碼dll時遇到了一些困難(用C#framework 4.0編寫)。 我正在使用dll導入如下

[DllImport(@"C:\MGW_SDK.dll", EntryPoint = "fInicializaSDK")]
public static extern int fInicializaSDK();

奇怪的是,從我的開發環境(Windows XP)調用時,它工作得很好,但是當在生產服務器(Windows7)上時,它會生成以下異常:

System.DllNotFoundException :無法加載' C:\\MGW_SDK.dll' :找不到指定的模塊。 於:(0x8007007E從HRESULT異常) Comtpaq.AdminPack.SDKWrapper.fInicializaSDK()Comtpaq.AdminPack.AdminPaqRepository.InitializeSDK()C:\\Work\\AgroIn\\AdminPaqRepository.cs :線30

我已經運行了Dependency Walker ,它將以下依賴關系顯示為沖突: C:\\windows\\system32\\SHLWAPI.DLL

我已經嘗試將該dll復制到我的部署目錄

MGW_SDK.dllc:\\ (如路徑所示)

我已經安裝了C運行時庫

我還注意到一些有趣的東西:在例外情況下,開發路徑顯示C:\\Work\\AgroIn\\AdminPaqRepository.cs:line 30

還有什么可能是這里的問題?

編輯

我使用MGW_SDK.dll一個extern / dllimport方法構建了一個小型控制台應用程序並運行它沒有問題(沒有任何DllNotFoundException ),所以這似乎與我正在構建的應用程序有關(a WCF服務)。 此服務托管在WAS上,但我仍然無法找到問題。

嗯,這是一個非常棘手的問題。 它與dll依賴關系無關,也與dll位置無關。 這不是關於我如何調用DllImport 這是一個權限問題。

基本上這個問題是通過在dll所在的文件夾中取出然后再添加執行權限來解決的。 看到這篇文章 (Wayback機器)。


Oracle 9.2客戶端軟件要求您通過以下步驟為Oracle Home提供Authenticated User特權:

  1. 以具有管理員權限的用戶身份登錄Windows。

  2. 從“開始”菜單啟動Windows資源管理器,然后導航到ORACLE_HOME文件夾。 這通常是“Oracle”文件夾下的“Ora92”文件夾(即D:\\Oracle\\Ora92 )。

  3. 右鍵單擊ORACLE_HOME文件夾,然后從下拉列表中選擇“屬性”選項。 應出現“屬性”窗口。

  4. 單擊“屬性”窗口的“安全”選項卡。

  5. 單擊“名稱”列表中的“經過身份驗證的用戶”項(在Windows XP上,“名稱”列表稱為“組或用戶名”)。

  6. 取消選中“允許”列下“權限”列表中的“讀取和執行”框(在Windows XP上,“權限”列表稱為“經過身份驗證的用戶的權限”)。

  7. 重新檢查“允許”列下的“讀取和執行”框(這是您剛剛取消選中的框)。

  8. 單擊“高級”按鈕,在“權限條目”列表中,確保您看到其中列出的“已驗證用戶”:

      Permission = Read & Execute Apply To = This folder, subfolders and files 

    如果不是這種情況,請編輯該行並確保“應用到”下拉框設置為“此文件夾,子文件夾和文件”。 這應該已經正確設置,但重要的是驗證這一點。

  9. 單擊“確定”按鈕,直到關閉所有安全屬性窗口。 光標可能會將小時玻璃顯示幾秒鍾,因為它會將您剛剛更改的權限應用於所有子文件夾和文件。

  10. 重新啟動計算機以確保這些更改已生效(重要)。

重新執行應用程序,它現在應該工作。

C的根是UAC不會讓你寫的地方之一。 有時,要求從保護區未列於載貨艙單的應用程序最終從虛擬化等同閱讀-和你的DLL不會在那里。 嘗試將DLL移動到另一個文件夾(不是C的根目錄,而不是程序文件下的任何內容),看看是否能解決它。 如果是這樣,您可以將其留在那里或(更好)在您的應用上放置清單以防止虛擬化。

您是否嘗試過使用程序集綁定日志查看器

裝配綁定日志查看器

不知道這是否可行,但您是否嘗試使用regsrv32或其他安裝包在Win7盒上注冊MGW_SDK.DLL?

還試着找出MGW_SDK.DLL的依賴關系是否也可以在Win7機器上使用(在系統上或在你的應用程序文件夾中注冊都可以)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM