Win32自定义资源可以有多大?

10
尝试创建类似于SFX(自解压安装程序)的东西时,我使用Visual C ++中的自定义资源将设置文件包含在一个exe中。当设置文件的大小超过约900 MB时,链接器无法生成嵌入资源的exe。奇怪的是,链接器确实生成了一个没有任何警告的exe。生成的exe是一个静态链接的MFC应用程序(可执行文件的主应用程序)。但是,并没有包括任何资源。我从控制台观察了链接期间的exe大小。在最后降至2MB之前,它一直显示为900 MB。如果我删除一些文件(例如总大小为500MB),则可以生成所有资源嵌入的exe。自定义资源的实际大小限制是多少?请注意,可执行文件的最终大小约为1GB,远小于2GB的Win32应用程序可以处理的大小。所以我想知道这是vc ++ 2010的bug还是特性?顺便说一句,我还使用了/expectedoutputsize技巧。但是除了链接速度更快外,它并没有帮助到我。

2
Win32资源不是包含大量数据的好方法。只需将其附加到文件中,从已知偏移量(大于可执行文件本身)开始,并使用通常的文件读取函数来访问它。 - Ben Voigt
另一个选择是将原始资源数据包含在对象文件中并进行链接。在Linux / OS X上,您可以使用GNU objcopy将二进制文件转换为对象文件,但我不确定如何使用Microsoft的工具在Win32上执行此操作。 - Adam Rosenfield
是的,对于大量数据,将二进制附加到exe文件中更有意义。然而,我仍然认为这是VC++ 2010中的链接器错误。如果我使用调试构建进行链接,问题就消失了!因此,我尝试了一些链接器选项,似乎使用/INCREMENTAL=yes可以解决问题! - Zhichao
3个回答

1

晚了回答,也许对其他人有帮助。这可能不是你问题的答案,但这可能是解决你问题的方案。查找“Bitrock安装程序”。这还提供自解压安装程序。我在许多项目中成功使用它进行部署。


0
根据PECOFF规范,资源数据条目的大小为4个字节(IMAGE_RESOURCE_DATA_ENTRY.Size-请参阅winnt.h)

Data RVA字段指向的资源数据的字节数。


0

我在这里回答了一个类似的问题这里

基本上,在可执行文件的末尾添加二进制加魔数(唯一分隔符)。在运行时打开可执行文件进行读取,通过魔数或其他方法找到偏移量,剩下的文件就是你的大数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接