Appearance
安装软件制作方案
前言
本文旨在记录一套可行的支持Windows和Linux平台安装包制作方案。目前,成熟的安装包制作工具有很多,可选的有NSIS、InstallAnyWhere等。其中,有只支持Windows的,也有支持跨平台的。关于使用这些工具,个人愚见:优点是使用方便,有的可以直接在图形界面操作自定义安装包效果,没有太多的编码工作。缺点是深度个性化定制可能付出较多成本。这些工具一般都有自己的脚本语言,要想深度定制,需要付出的学习成本是应该考虑的。个人认为,如果有多套产品,花时间去制作自己的安装包打包程序是划得来的。制作安装基本上都是一劳永逸的,首次开发需要花点时间,但是如果其它产品需要打包安装包,无需花太多时间修改。本文记录自己实践的打包方案。
路线
安装和卸载程序的图形界面采用javafx,开发完毕后进行程序打包,确保包不缺失依赖可以独立运行。打包后,需要将产品包和安装卸载程序包打包为安装包,用户启动安装包后,执行安装程序将产品包和卸载包安装到用户指定位置。在Windows平台,安装包制作采用7Zip的自解压方案。Linux平台采用Shell脚本打包方案。下面分别详述这两个打包安装包的方案。
Windows平台
windows平台采用7zsfx自解压方案制作单文件安装包。注意单文件安装包exe文件的大小限定在4g以内,windows平台不支持4g以上的exe文件。如果超过4g以上怎么办,下面给出7z官方论坛给出的方案以供参考,本人未测试。

如果文件过大,导致安装包不是单文件,又想安装包以单文件提供给用户怎么办?这里提供一个方案,将多个文件打包成为iso文件,iso可以解压后执行,也可直接运行挂载后运行。下载软碟通,然后参考下面的命令打包成单个iso文件。
-f与-d的区别,-d不会把最外层的文件夹打进行
bat
D:\ProgramFiles\UltraISO\UltraISO.exe -volume "test" -udfdvd -lowercase -silent -f D:\download\package\20g\setup.exe -f D:\download\package\20g\archive.7z -output D:\\test.iso下载7z工具 https://sparanoid.com/lab/7z/
下载7zSD_extra 7zSD extra
https://olegscherbakov.github.io/7zSFX/
配置文件的内容可以通过7z SFX Builder生成,如果熟悉参数可以手动修改
shell
;!@Install@!UTF-8!
CancelPrompt="退出"
GUIFlags="512"
MiscFlags="4"
ExtractTitle="安装准备中..."
ExtractCancelText="取消"
Title="GeoGlobe Kernel SDK"
ExecuteFile=".\jinstaller\jinstaller.exe"
;!@InstallEnd@!将安装包打包成为exe文件的关键脚本如下
shell
.\7z\7z.exe a .\temp\WindowX64\package.7z .\temp\WindowX64\*
copy /b .\7z\7zsd_All.sfx + .\7z\sfx.config + .\temp\WindowX64\package.7z .\temp\WindowX64\runtime.exe关于图标和版本信息可以用ResourceHacker打开sfx文件更改
Linux平台
可以将安装脚本install.sh和安装包package.tgz打包成一个bin文件,关键脚本如下
shell
tar -zcvf package.tgz *
cd $WORKDIR
chmod +x ./data/install.sh
cat ./data/install.sh $INPUTDIR/package.tgz > $OUTPUTDIR/$PACKNAMEinstall.sh脚本执行自解压和安装操作
shell
#!/bin/sh
#临时目录
temp_dir=$(pwd)
temp_file=${temp_dir}/temp.tgz
rm -rf install_temp
mkdir install_temp
temp_install_dir=${temp_dir}/install_temp
#解压
echo "解压中..."
sed -n -e '1,/^exit 0$/!p' $0 > ${temp_file} 2>/dev/null
tar zxf ${temp_file} -C ${temp_install_dir}
rm -f ${temp_file}
#${temp_install_dir}就是自解压输出目录,后续基于此目录进行一些按照操作
#....
echo "开始安装"
#todo安装脚本
rm -rf ${temp_install_dir}
echo "安装完毕"
exit 0关于卸载
卸载需要根据配置文件来删除文件。配置文件准确来说是安装文件清单。卸载程序根据安装清单进行卸载。配置文件推荐使用xml格式。如果安装程序有向系统进行注册操作,卸载程序需要清除相应的注册信息。