2010-02-25 57 views
1

我剛剛建立一個新的更快的電腦,成爲我的開發站。當我運行一個應用程序時,我正在使用Delphi 6 Pro時遇到DLL未能找到問題,但我不認爲問題出在Delphi上。請記住,我擁有與舊計算機上的目錄和工具完全相同的設置,並且在該計算機上可以在運行時找到DLL,而且不會失敗。症狀似乎是我的PATH環境變量中只有一些目錄正在被搜索,而最近添加的目錄不是。我試圖把包含缺少DLL的diretory放在當前用戶PATH中,然後在系統PATH中,並且仍然無法找到DLL。DLL搜索路徑只是部分搜索

這裏有一些事實:

  • 的DLL會出現在PATH環境變量中,如果我運行一個命令窗口,查詢的路徑的正確路徑。

  • 如果我把DLL放在一個像Windows主目錄的目錄下,它可以在運行時找到。

  • 如果我使用Unix風格的「where is」 utilty形式flounder.com它找到

  • 我監控的程序在運行時使用(是Sysinternals的微軟現在的)進程監視器實用程序在路徑中的DLL,所以我可以觀看系統搜索DLL。系統確實在路徑中的10個子目錄中搜索了7個,但由於某種原因,如上所述,忽略了其中的3個。請注意,我知道無效目錄被從路徑中刪除,但我三重檢查,他們確實是有效的目錄。

  • 最後,我創建了一個C:\ DUMMY目錄,並將該目錄添加到PATH環境變量中,當我檢查進程監視器時,該目錄也從未被搜索過。

這真是奇怪的行爲,我從來沒有見過。就好像在對PATH進行某些修改之前,系統在搜索DLL時使用了舊PATH的副本。

有沒有人有解決方案或診斷的想法?

謝謝。

+0

你怎麼改變路徑? – jdigital 2010-02-25 04:24:41

+0

最簡單的解決方案,如果路徑被緩存,就是重新啓動機器。當然我們可以弄清楚這個問題,但是值得付出努力嗎? – jdigital 2010-02-25 04:25:50

回答

2

通過刪除不必要的路徑來縮短PATH變量,僅用於測試。我已經看到,在安裝了許多喜歡修改PATH的軟件之後,PATH變得太大了。儘管PATH變量包含所有有效路徑,但由於路徑太多,所以末尾的路徑不會被搜索到。

1

昨天我這個非常問題,我用:

SetDLLDirectory(DirectoryPath:PWideChar) 

而且這個固定,基於NT OS只是表面。

此外,我會檢查以確保你沒有錯過分號; (或者錯誤地將它輸入爲冒號:)從列表中的一個路徑名稱之間。

+0

如果操作系統甚至無法加載程序,因爲它找不到所需的DLL,那麼該函數將無濟於事。該程序需要在可以調用之前開始運行。 – 2010-02-25 15:20:30

+0

好的點好。我當然使用動態加載的DLL的 – 2010-02-25 15:46:59

1

嘗試檢查子目錄7或8是否不合法(非法路徑)。
我已經看到了搜索停止的例子,如果發現非法條目。

3

請確保您正在更改系統PATH變量(使用控制面板),然後您將完全從新的啓動任何過程。如果您要運行Delphi,請更改路徑,然後在調試器中運行應用程序,然後將不會看到新路徑,因爲它將繼承啓動過程中的PATH,該啓動過程仍舊有舊路徑。你應該重新啓動Delphi來讓它看到新的路徑。