2012-02-16 78 views
2

我使用「在靜態庫中使用MFC」選項創建了我的MFC應用程序。在靜態庫中使用MFC

我正在使用Installshield爲我的應用程序創建安裝。我應該在installshield中添加哪些依賴項文件或「合併模塊」?

是否需要添加「Microsoft C++運行時庫」或「Microsoft Visual C++ MFC」合併模塊?

回答

1

至少如果內存服務,沒有。如果您在靜態庫中使用MFC,則還需要靜態鏈接到標準庫。除非你添加了一些其他的DLL的依賴,否則你應該有一個獨立的可執行文件。

如果您願意,您可以/只需確認dependency walker即可。

+0

謝謝。我在我的應用程序中使用了MSXML。所以我在installshield中添加了MSXML dll。如果我們使用靜態MFC庫,我不確定是否要添加「C++運行時庫」合併模塊。我會嘗試依賴沃克。 – 2012-02-16 04:49:38

6

靜態鏈接意味着foo.lib在鏈接器階段嵌入myapp.exe中。不存在對foo.dll的依賴,不需要重新分配。你也應該明白,雖然靜態鏈接使你的部署更容易,但它實際上被認爲是一種安全可調性,因爲如果在foo.lib/foo.dll中找到漏洞(本例中爲MFC),那麼Microsoft無法通過更新版本來修補應用程序在WinSXS緩存中。這將取決於您在生成機器中包含最新的重做,重建和重新部署。

我強烈建議使用基本快照創建一個虛擬機,該基本快照代表您想要支持的最舊操作系統,然後在此處測試您的安裝程序。這將有助於識別缺失的依賴關係,然後可以使用Dependency Walker,ILDasm/.NET Reflactor和ProcessMon等工具來解決這些依賴關係。

+0

感謝您的明確解釋。這給我靜態鏈接Mfc的優點/缺點。 – 2012-02-17 06:58:04