如何在EXE文件中包含我的程序依賴關係DLL(因此我只需分發該文件)?我正在使用C++,所以我不能像使用C#一樣使用ILMerge,但有沒有更簡單的方法在Visual Studio中自動執行此操作?在EXE中分發DLL(C++)
我知道這是可能的(這就是爲什麼安裝工作),我只是需要一些幫助被指向到這一目標的最佳途徑。
謝謝你的時間。
如何在EXE文件中包含我的程序依賴關係DLL(因此我只需分發該文件)?我正在使用C++,所以我不能像使用C#一樣使用ILMerge,但有沒有更簡單的方法在Visual Studio中自動執行此操作?在EXE中分發DLL(C++)
我知道這是可能的(這就是爲什麼安裝工作),我只是需要一些幫助被指向到這一目標的最佳途徑。
謝謝你的時間。
存在着兩種選擇,這兩者的理想是遠:
第一種方法的缺點是通過內特如上所述。第二種方法是可能的,但是很複雜(需要深入瞭解某些低級別的東西),並且不允許DLL代碼訪問DLL資源(這很明顯 - 沒有DLL的映像,所以操作系統不知道在哪裏採取資源)。在某些情況下可用
還有一個選擇:創建一個虛擬磁盤,其內容被存儲在您的EXE文件的資源,並從那裏加載DLL。這可以使用我們的SolFS產品(操作系統版本),但創建虛擬磁盤本身需要使用內核模式驅動程序,必須在使用前將其寫入磁盤。
大多數安裝程序使用zip文件(或類似的東西)來存放任何需要的文件。當您運行安裝程序,它解壓縮數據,並把其中所需要的單個文件(通常添加註冊表項,註冊任何COM控件安裝它,等)
存在諸多問題這種方法。例如,請參閱REAL Software的this post。他們的「REALbasic」產品曾經這樣做,並且存在以下問題:
他們試圖解決這個問題造成了更多的問題,包括崩潰。最終他們放棄了並現在與應用程序並排分發DLL。
如果你真的需要單EXE部署,並且不能使用安裝程序因某種原因,可靠的方式是靜態鏈接的所有依賴。這假定你有正確的.lib
(而不僅僅是鏈接在DLL中的.lib
)。
可以Visual Studio做靜態鏈接,而不是動態鏈接? – Bruno 2010-10-22 15:44:00
如果您正在尋找安裝解決方案,我推薦NSIS(http://nsis.sourceforge.net/Main_Page)。安裝程序以這種方式工作,因爲DLL和其他程序文件位於EXE的數據部分。他們不加載這些DLL。如果您正在尋找一個將所有內容都彙總爲一個的EXE,那麼您需要靜態編譯它。 – Brad 2010-10-22 15:44:08