2010-06-25 132 views
4

我有一個.exe文件,我相信它是用VB6創建的。 Visual Studio 6或更高版本中是否有任何工具可讓我看到應用程序運行所需的任何動態庫?確定.exe依賴關係

回答

14

嘗試this - Dependancy Walker。

+0

請注意,程序運行時可能會動態加載一些內容(例如COM組件)。您需要針對依賴項步行者運行該程序並鍛鍊所有程序功能。 – MarkJ 2010-06-25 13:38:03

6

您可以看到與Dumpbin/imports隱式鏈接的DLL依賴關係。或Dependency Walker提供的靜態視圖。但是,VB6程序通常對COM組件有很大的依賴性,並且它們在程序運行時獲得需求加載。這些組件需要在程序加載和使用前註冊。

爲了看到這一點,您需要一個實用程序來顯示程序如何使用註冊表。 VS6工具箱沒有這個功能,你可以使用SysInternals的ProcMon工具。請注意試圖在HKLM \ Software \ Classes \ CLSID註冊表項中打開註冊表項的程序,這是註冊COM組件的位置。您應該看到它找不到可以從中確定CLSID的密鑰。

這仍然沒有真正讓你在任何地方,因爲這只是一個不透明的數字,它並不告訴你的名稱或DLL的位置。在程序正確運行的機器上使用Regedit.exe。找到該鍵,LocalServer32值告訴你哪個DLL或OCX實現COM組件。

+0

HKLM \ Software \ Classes \ CLSID並非全包。自從Win2K以來,我們已經進行了每用戶註冊,並且自Vista以來進行了虛擬化每用戶註冊。隔離清單完全繞過註冊表的早期和晚期對象。我不知道什麼是「隱式鏈接的DLL」。也許你的意思是靜態鏈接? – Bob77 2010-06-25 22:30:23

+0

「靜態鏈接動態庫」是什麼意思?鏈接一個DLL隱式做:http://msdn.microsoft.com/en-us/library/d14wsce5%28VS.90%29.aspx讓Vista將您的程序視爲時間的受害者,以便它將虛擬化註冊表可能是解決方案我猜。 – 2010-06-25 23:01:57