一. 问题背景:
原制作 Windows 客户端安装包的方案我们采用的是 "NSIS 的Plugin模式"+"QT UI生成DLL"(可参考: NSIS-UI-PLUGIN )。但此方式的弊端:(1)需要学习 NSIS 脚本语法和 QT 开发,如果你的客户端主程序不是使用 QT 技术栈,那么还需要额外学一门开发技能,门槛较高。(2)近期 qt 官方联系并要求我们的商业软件中用到 qt 库,则须购买他们的商业版 License,这也是我们寻求替代的根本原因。
二. WinRAR 自解压可执行程序:
其基本原理为 WinRAR 工具支持将文件 or 文件夹压缩为 .exe 类型的可执行程序安装包。在双击安装包时,会自动将其中压缩的文件(夹)解压到指定目录下,并且在解压完成后执行解压目录下的指定文件。
三. 制作步骤
1. 下载并安装 WinRAR.exe
官方下载链接:https://www.win-rar.com/download.html?&L=0
2. 将 WinRAR 添加到系统环境变量中
3. 编写 .bat 脚本,用于创建自解压可执行程序
@echo Off
set softname="Your-Installer-Name.exe"
WinRAR.exe a -sfx -iadm -iiconc:./icon.ico "./%softname%.exe" ./Folder-Your-Want-to-Compress
Rar.exe c -zconfig.txt "./%softname%.exe"
解释:
(1) set 这里设置的变量是你想要生成的安装包可执行程序 exe 的名称;
(2) WinRAR.exe 这一句配置安装包图标,配置你要压缩的目录,可以把安装包 UI 程序和应用的主程序都放在这个目录下;
- -iadm 选项,表示当双击自解压可执行程序时,会请求管理员权限;
- -i 选项,表示自解压可执行程序的图标;
(3) Rar.exe 这一句是根据 config.txt 中的配置,执行压缩。生成自解压可执行程序 Your-Installer-Name.exe.
4. 编写解压配置 config.txt
TempMode
Silent=2
Overwrite=1
Setup=Folder-Your-Want-to-Compress/Your-Installer-UI-Program.exe
解释:
(1) TempMode 是配置将 Folder-Your-Want-to-Compress 目录解压到系统的 Temp 目录下;
(2) Silent 是解压模式:0 是不显示界面,1 是显示并且要手动点击解压按钮,2 是显示界面 并且自动解压;
(3) Overwrite 指是否覆盖:0 不覆盖,1 覆盖;
(4) Setup 指的是解压完成后自动执行的 exe,这里可以配置为 安装包UI程序,这样就实现了“双击安装包exe,自动弹出安装程序UI界面,指引用户选择安装位置,最后将主程序拷贝到用户指定的安装位置”。