答案1
一些安装可执行文件实际上只是将安装程序可执行文件与通用 .zip 或 .cab 存档组合在同一个文件中 - 7-zip 无需执行任何特殊操作即可识别它们,它只需找到 ZIP 标头并从那里开始即可。(InstallShield 有自己特定的存档格式,但它仍然具有存档格式。)
然而,这是不是以任何方式保证安装可执行文件 – 他们可以以任何他们想要的方式存储打包文件。他们可以发明自己的打包格式(毕竟,安装可执行文件无论如何都带有正确的解包器),他们可以将每个文件存储在“资源”部分中,他们甚至可以将一些文件存储在程序代码部分 – 没有任何内容严格定义安装可执行文件应如何工作。
对于其他一些安装可执行文件(例如 NSIS),7-zip 实际上有一个特殊的处理程序只是对于这种安装程序来说。但它也需要一个针对 InnoSetup、WISE 和其他程序的特殊处理程序。而且由于它在 InnoSetup 的设置中找不到已知存档,也没有针对 InnoSetup 的自定义处理程序,因此它只是将文件作为通用 .exe 文件(具体来说,作为 PE/COFF 格式文件)打开。
当你在 7-zip 中打开一个可执行文件时没有其中包含实际的存档,您看到的是构成 *.exe 文件的各种数据“部分”。(例如,部分.text
包含将加载到内存并在 CPU 上执行的机器代码,.data
部分包含程序中所有变量的初始值,部分.rsrc
包含程序的图标、对话框布局、翻译等。)它们实际上并不是文件根本不是,这只是 7-zip 呈现它们的方式。
因此[0]
,[1]
、 等编号的“文件”只是 7-zip 显示任何通用 .exe 文件中各种附加的无名部分的方式。对于 InnoSetup,这就是“可安装”文件以 InnoSetup 自定义的某种格式存储的地方,但 7-zip 不知道这一点。