2011-06-17 51 views
0

我需要檢查給定的DLL,如果它所依賴的所有DLL都存在。我能夠使用此問題中提供的代碼獲得DLL列表:How to programatically read native DLL imports in C#?。它給出了DLL的列表,包括系統的DLL(如kernel32.dll等)。我需要的是從列表中刪除它們,因爲我不需要檢查它們,我只需要檢查由開發人員明確導入的DLL。從DLL導入表中獲取用戶導入的DLL

任何想法如何做到這一點?

回答

3

Windows DLL和「常規」DLL之間沒有任何區別。程序員實際上確實明確地創建了它們的依賴關係,它不是偶然發生的。而你必須檢查它們,它可能需要一個DLL,也就是說,只能在更高版本的Windows上使用。

更嚴重的是,有很多方法不能可靠地工作。例如,您永遠無法弄清楚它何時使用Windows並行緩存中的DLL。您無法合理地進入解析清單的業務。動態依賴於其他DLL,而不是從IAT反向工程的靜態依賴關係,這也是很常見的。例如,COM和.NET程序集都是如此。

只有一個很好的方法來確定所需的DLL是否存在。加載DLL。

+0

謝謝。加載所需的dll可以完美地滿足我的需求。然而,有沒有什麼辦法可以得到這個需要的DLL所在的路徑,而不需要搜索目錄呢? – 2011-06-17 10:53:57

+0

是的,路徑是你很難撞到牆壁的地方。 MSDN Library有一些關於Windows如何在SetDllDirectory的文章中搜索DLL的文檔。但是這並不處理基於清單的激活或動態DLL加載的情況。這兩天很常見。 – 2011-06-17 10:58:30