2008-08-06 106 views
31

我想知道如何製作一個發佈版本,其中包含所有必要的dll文件到.exe中,以便程序可以在非開發機器上運行,而無需在目標機器上安裝微軟的可再發行組件。如何打包Visual Studio C++項目以進行發佈?

如果不這樣做,您會收到錯誤消息,指出應用程序配置不正確並重新安裝。

+0

只需使用安裝嚮導,如Inno Setup。如果你需要的是打包一堆文件,Inno Setup特別容易使用。 – sashoalm 2015-02-16 10:34:07

回答

17
  1. 選擇項目 - >屬性
  2. 選擇配置 - >常規
  3. 在框中您應如何鏈接MFC,選擇靜態鏈接它。
  4. 選擇鏈接器 - >輸入。在附加依賴​​,添加您需要的應​​用程序靜態鏈接任何庫。
+3

我可能會錯過一些東西(我不是專家),但在執行完下面的步驟後,我仍然需要將所有* dll *包裝在* exe *文件夾中。不是OP有意將所有東西打包到* exe *文件中嗎? – Malabarba 2011-09-07 04:09:01

0

你會尋找到靜態鏈接(而非動態鏈接)

我不知道有多少MS的靜態再分發中鏈接。

0

如果您想了解哪些dll的目標機器丟失,然後使用過去與MSDev一起使用的depends.exe,但也可以找到here。在一些目標機器上測試這個應該會告訴你你的應用需要打包哪些dll。

10

您需要設置運行時庫(在C/C++ - >代碼生成)的所有項目,靜態鏈接,這關聯到以下默認建築配置:

  • 多線程調試/發佈
  • 單線程調試/發行版

與這些庫的「DLL」版本相反。

即使你這樣做,根據你使用的庫,你可能需要安裝一個合併模塊/框架/等。這取決於您的依賴關係的靜態LIB版本是否可用。

4

注意Microsoft do not recommend that you static link the runtime into your project,因爲這阻止它通過Windows更新獲得服務而修復嚴重安全漏洞。如果您在主.exe和.dll文件之間傳遞內存,也會有潛在的問題,就好像每個靜態鏈接運行時都會導致malloc/free不匹配問題。

您可以將DLL包含在可執行文件中,無需將它們編譯到.exe中,也不需要運行重新啓動工具 - 這就是我所做的,它似乎可以正常工作。

美中不足的是,如果您要分發多種Windows版本,則需要將文件包含兩次 - 較新的操作系統需要清單定義的目錄中的文件,而較舊的操作系統需要所有文件在程序目錄中。

相關問題