我正在尝试创建一个自提取(SFX)rar存档,它将同时具有图标和图像。我使用以下命令行:
winrar.exe a -r0 -sfx -ibck -z"MyConfFile.conf" -iimg"MyImage.bmp" -iicon"MyIcon.ico" MyPackage.exe @"MyFileList.txt"
问题是,生成的.exe无法解压缩。相反,它说"档案要么格式未知,要么已损坏"。如果我只设置图标或图像,那么一切都很好。但如果我同时设置这两个,我就有麻烦了。最奇怪的事。
SFX模块的代码+位图文件的数据+图标文件的数据+SFX注释文件+其他数据(签名)首先写入SFX存档文件,然后将具有压缩数据的实际存档附加到文件中。
根据RAR 5.0存档格式技术文档,存档数据之前的所有数据的最大大小目前必须小于1MB。
可能的解决方案:
- 通过缩小位图文件的宽度/高度来减小位图文件的大小
- 通过将颜色从真彩色减少到256色来减小位图文件的大小
- 通过从图标文件中删除不需要的图标来减小图标文件的大小,因为尺寸为16x16、24x24、32x32和48x48的单个图标就足够了。某些*.ico文件包含多个不同尺寸的图标。标准尺寸中的单个图标就足以用于SFX归档。甚至可以删除一些尺寸,如24x24和48x48,以便图标文件仅包含一个尺寸为16x16和32x32的图标
- 通过使用自定义调色板将文件中的所有真彩色图标减少到只有256种颜色的图标,或者在可能的情况下甚至减少到16种颜色,来减小图标文件的大小
- 如果可以的话,可以减小注释文件的大小,比如在安装前对要删除的文件使用通配符,或者在执行SFX时向用户显示更短的文本
- 减少SFX模块的大小,例如通过使用UPX压缩它
但要考虑到,在压缩SFX模块本身时,位图和图标必须在SFX模块自身的资源中,而不是单独附加。
像Resource Hacker这样的工具可以用来用自己的位图替换标准位图,用自己的图标替换标准图标,以及更改对话框布局。这减少了归档数据之前的数据的总大小,即使不使用像UPX这样的运行时打包器压缩SFX模块。
WinRAR的版权所有者允许使用Resource Hacker等工具自定义WinRAR标准SFX模块之一的资源。在WinRAR(WinRAR.chm)的帮助中,通过索引选项卡或内容标签(自解压模块的第一个条目)查看标题为GUI RAR和ZIP SFX模块(Default.SFX和ZIP.SFX)的页面。