65.9K
CodeProject 正在变化。 阅读更多。
Home

创建自解压可执行文件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (20投票s)

1999年11月22日

CPOL

3分钟阅读

viewsIcon

318504

downloadIcon

5724

一个允许您创建自解压可执行文件的类,用于分发或设置程序

Self Extractor Builder

引言

这个类允许您创建自解压可执行文件,用于分发或安装程序。 很多人在我制作这个类的过程中帮助了我,我想感谢其中的几位。

  • Levente Farkas - 感谢他提出该类如何实现的建议
  • Roger Allen - 感谢他提供有关数据读取和写入的进一步建议
  • Jamie Thornback - 感谢他提供回调程序的帮助
  • Tim Johnson - 感谢他的 CShellFileOp 类,这个类在这个类中被简要地使用

这个类的一个新增加的功能是 Zlib 提供的压缩功能,以及以下贡献者: -

  • Luca Piergentili - 感谢他提供关于压缩功能的建议和源代码贡献。
  • Mark Nelson - 感谢他的 Zlib 包装类,我无情地把它改编成了我自己的代码。

自解压 (SFX) 可执行文件的描述

这个类创建的 SFX 文件包含一个提取可执行文件,数据文件附加到它的末尾。 文件末尾的数据不会影响可执行镜像,因此文件执行时就好像数据不存在一样。 因此,为了提取数据,可执行文件必须首先从自身分离数据,然后创建适当的文件。 我选择的方法是在数据之后写入一个“目录”(TOC),提取器可以读取该目录以找出各种文件存储在数据段中的位置。

File Layout

TOC 的布局如下:-

从存档末尾开始,向后工作

头部信息

  • 10 字节 - 签名(SFX 存档的标识符)
  • 4 字节 - SFX 存档的版本号
  • 4 字节 - 存档中的文件数

目录

本节包含每个文件的以下格式的一条记录

  • 4 字节 - 文件名长度
  • 可变长度 - 文件名
  • 4 字节 - 文件长度(压缩后)
  • 4 字节 - 文件长度(未压缩)
  • 4 字节 - 数据在存档中的偏移量

数据段

每个文件都使用 zlib 在内存中压缩,然后按照 TOC 的顺序写入。 之后是提取器可执行文件。

如何使用

说了这么多,你不需要知道上面任何内容就可以使用它。 你只需要创建一个 CSelfExtractor 的实例,然后调用 AddFile() 来添加所有你想包含的文件。 接下来调用 Create() 来创建存档。

演示项目包含两个项目 - 'Extractor' 是提取存档的可执行文件,Self Extractor 是用于构建自解压存档的程序。 Self Extractor 允许你指定一个外部提取程序用于存档,或者你可以使用已编译到程序资源中的提取器。 阅读源代码以了解更多信息。

Zlib 源代码受 此处记录的许可协议约束。 这些演示使用了 codeguru.com 和 codeproject.com 上其他人编写的类,因此这些类中的任何错误都应指向各自的作者。

更新

2002 年 8 月 21 日 - 使用读者提出的与文件权限和 CFileDialog 相关的修复更新了代码。 此外,Zlib 已更新到 v1.14,其中修复了一个重要的安全问题。

© . All rights reserved.