分析思路: 安装制作器首先有一个主安装程序执行文件(YousefulLoadProgram.EXE)。这个文件负责执行后将用户制
作的安装项目文件(假如用户生成的安装项目文件为 ‘MYSetup.EXE’)解压出来,并执行。安装制作器制作器在生成
安装文件时,首先生成 Setup.1 文件。 Setup1.文件包括由用户制作的主安装程序MYSetup.EXE 文件以及其相关的
DLL 文件。 然后再生成 Files.1文件,将安装程序需要安装的文件全部压缩到Files.1 文件中。最后,制作器将
Setup1.1 及 Files.1 文件以及安装解压信息数据 TselfExtractInfo 合成到 YousefulLoadProgram.EXE 文件后生成一
个新的安装程序 Setup.exe 文件。用户在执行 Setup.exe 文件 (实际上执行的是YousefulLoadProgram.EXE) 时,首
先解压 Setup1.1中的内容到一个临时目录下,即将 MYSetup.EXE 文件及相关DLL文件解压出来。并执行
MYSetup.EXE 文件并传递参数 “-s(Path+Setup.exe) ”(事实上是指定 MYSetup.EXE执行安装时读取数据的文件),
MYSetup.EXE 执行后根据程序中的设定,读取 数据文件中的数据,并安装到当前系统中, 完成安装任务。
关键技术:压缩文件并合成文件。解压文件与根据解压信息读取数据文件解压文件。定制解压信息
解压信息中包括 Setup1.1 与 Files.1 文件的起始位置与终止位置偏移量。
制作安装程序时的分析,
步骤
1. 首先保存 Project 文件,(使用 ToolServices.SaveProjcet)
2. 编译 Project,安装程序执行文件MYSetup.EXE (使用 GetCompileMenu 函数 找到 ‘ProjectCompileItem’ 菜单
项, 使用该菜单项的 Cick 事件。)
3. 调用 TcustomInstall 的BuildDistributables 过程序, 这个过程完成创建分发时的 Setup.exe 文件的工作。
4. 在 TCustomInstall的 BuildDistributables 中调用 CreateStub 创建 ‘Setup.1’ 文件, 将MYSetup.EXE 文件以及
相关的DLL文件包括到Setup.1 文件中去。
5. 调用继承的 Compress (压缩) 过程,Compress过程继承来自 TfileContainer, 这个过程完成生成文件 ‘Files.1’
的任务, 将当前安装项目中设定的所有需要安装的文件全部压缩到 File1.1文件中。
6. 拷贝文件在 ‘YousefulLoadProgram.exe’ 为制作器需要生成的 “SETUP.EXE”文件。
7. 将Setup1.1 文件及 Files1.文件及解压信息 TselfExtractInfo 添加到文件 SETUP.EXE 后。
8. 至此,完成了所有的生成任务。
安装程序运行时的分析,
执行 Setup.exe (实际上执行的是 YousefulLoadProgram.exe) 文件
YousefulLoadProgram.exe 文件执行任务
ReadSelfExtractingInfo: 读取解压缩信息
DecompressSetup1:解压缩文件主程序(安装程序实际需要执行的文件)(MYSetup.EXE)及相关的DLL文件到系统
的一个临时目录下。并根据解压信息生成执行MYSetup.EXE 文件的参数。
调用 TProgramLauncher. ExecuteDos 过程,执行主安装程序, 主程序会根据参数传递及解压缩信息从安装数据
文件中读取数据进行安装。
文件压缩原理及方法已解决 (Compress)。
合成安装程序的方法已解决 (BuildDistributables)。
从安装程序中读取文件信息的方法已解决 (ReadInfoFromArchive).