2012-07-25 83 views
9

試圖創建類似於SFX(自解壓安裝程序)的東西,我在一個exe文件中使用visual C++中的自定義資源包含安裝文件。當安裝文件的大小達到〜900 MB時,鏈接器無法生成嵌入資源的exe文件。奇怪的是,鏈接器確實生成了一個沒有任何警告的exe文件。生成的exe是一個靜態鏈接的MFC應用程序(exectuable的主要應用程序)。但是,不包含資源。在從控制檯鏈接期間,我已經觀看了exe文件的大小。它顯示了900 MB的一段時間,然後最終下降到2MB exe。如果我刪除了一些文件(比如說總大小爲500MB),那麼嵌入的所有資源都會生成一切正常的exe文件。自定義資源是否存在實際大小限制?請注意,可執行文件的最終大小約爲1GB,這比2GB的win32應用程序可以解決的要少得多。所以我想知道這是一個VC++ 2010的錯誤或功能?順便說一句,我也使用/ expectedoutputsize技巧。但除了鏈接速度更快,預期的輸出尺寸更大之外,它無濟於事。Win32自定義資源有多大?

+2

Win32資源不是包含大量數據的好方法。只需從一個已知的偏移量(大於可執行文件本身)開始將它附加到您的文件中,並使用通常的文件讀取功能來訪問它。 – 2012-07-25 20:42:09

+0

另一種選擇是將原始資源數據包含在目標文件中並將其鏈接到目標文件中。在Linux/OS X上,可以使用GNU objcopy將二進制文件轉換爲目標文件,但我不確定你會使用微軟的工具在Win32上做到這一點。 – 2012-07-25 20:58:01

+0

是的,對於龐大的數據,將exe附加到exe更有意義。但是,我仍然認爲這是VC++ 2010中的鏈接器錯誤。如果我使用調試版本鏈接,問題就不存在了!所以我嘗試了一些鏈接器選項,看起來使用/ INCREMENTAL = yes是訣竅! – Zhichao 2012-07-26 03:42:18

回答

0

根據該PECOFF Specification,資源數據條目的大小爲4個字節(IMAGE_RESOURCE_DATA_ENTRY.Size - 見WINNT.H)

大小,以字節爲單位,由指向的資源數據的數據RVA字段。

1

遲來的答案。可能對別人有幫助。可能不是你的問題的答案,但這可能是解決你的問題。檢查'Bitrock安裝程序'。這也提供了自解壓安裝程序。我在我的許多項目中成功使用它進行部署。

0

我已經回答了類似的答案here

基本上將二進制+幻數(唯一分隔符)附加到可執行文件的末尾。在運行時打開可執行文件進行閱讀,通過幻數或其他方法找到偏移量,文件的其餘部分就是您的大數據。