7z制作自解压安装包
像7z和winRAR这样的压缩工具都支持制作自解压的文件。所谓自解压的文件就是不需要目标机器上安装解压工具,通过运行压缩包自己即可解压出压缩包中的文件。下面我们就介绍一下如何利用7z的自解压功能制作应用程序安装包。
熟悉应用程序安装的朋友应该清楚,安装一个应用程序真的是可简单,简单到很简单,也可以复杂,复杂到很复杂很复杂。简单的诸如把几个文件放在一起打个压缩包,解压到目标机器就行了。复杂些的诸如vistual studio和office的安装,要安装这些工具对windows来说可谓是”伤筋动骨”,不仅要给windows打补丁还要安装各种辅助工具,各种程序组件,并且还要支持卸载,出了问题还要支持修复…
搞定简单的安装程序7z自然不在话下,毕竟是老本行嘛。但7z真能搞定那么复杂的安装程序吗?说7z自己能搞定确实太夸张了,但结合msi安装包,7z确实能够胜任复杂程序的安装。在制作安装包前我们先了解下7z的自解压功能。
自解压文件
通过UI操作可以很轻松的制作一个自解压的文件。唯一要做的就是在点击”确定”按钮前选择”创建自释放程序”选项。

选择后你会发现文件的后缀名直接变成 exe了。点击确定即可生成自解压文件。然后运行一下生成的test.exe文件,会提示你选择解压缩的目录。
下面我们看看怎么通过命令行的方式生成自解压文件。
7z.exe a test.exe –sfx testdir
OK,有了上面的基础后我们就可以动手制作安装包了。下面就通过两个例子分别介绍简单安装包和复杂安装包的制作过程。
制作简易安装包
所谓的简易安装包是指,在运行安装程序时把安装包中的可执行文件解压到某个目录,然后运行已解压的应用程序。
准备源材料
我们先写一个简单的demo程序TestApp.exe, 它有一个配置文件TestApp.exe.config。
然后需要下载7zs.sfx文件。7zs.sfx文件是7z为制作自解压的安装程序提供的一个文件。9.20的7zs.sfx文件在7-Zip extra包中,之后的版本都把这个文件放在了LZMA包中,并且改名为7zs2.sfx。
制作过程
首先使用7z把要安装的文打包:
7z a demo.7z TestApp.exe TestApp.exe.config
接着创建配置文件config.txt,内容如下:
;!@Install@!UTF-8! Title="Demo app" ExecuteFile="TestApp.exe" ;!@InstallEnd@!
最后执行下面的命令生成自解压的demoapp.exe程序:
copy /b 7zS.sfx + config.txt + demo.7z demoapp.exe
好了,运行demoapp.exe试试,TestApp.exe直接运行起来了。
优点
当我们的程序不止一个文件时,使用这种方式用户无需执行安装过程,且看不到一堆乱七八糟的文件,使用体验比较好。
制作复杂的安装包
前面我们提到,7z自身是无法完成复杂安装包制作的。但是msi安装包可以,msi安装包是windows平台上默认的安装程序的方式,多复杂的安装方式都能搞定。我们可以先生成一个msi安装包,然后像前面执行exe一样执行msi安装包。
有同学可能要跳起来了,既然执行msi安装包就可以完成安装任务,干嘛还要脱了裤子…,多此一举呢?这里面自然是有很多难言之隐的,比如运行msi的体验不好,要想把安装日志保存到文件中需要在命令行运行 msiexec.exe /i xxx.msi /log abc.log。要想以管理员权限启动msi也是做不到的,你只能先以管理员身份启动cmd,然后运行msiexec.exe /i xxx.msi… 使用7z则可以轻松搞定这些问题。
原材料
准备一个应用程序的msi安装包。和前面一个,我们也需要7zs.sfx文件。
制作过程
首先把msi文件打包到7z压缩包中:
7z a testmsi.7z myapp.msi
创建配置文件config.txt,内容如下:
;!@Install@!UTF-8! Title="Demo msi" BeginPrompt="Do you want to install the xxx?" ExecuteFile="myapp.msi" ;!@InstallEnd@!
最后执行下面的命令:
copy /b 7zS.sfx + config.txt + demo.7z demoapp2.exe
运行demoapp2.exe,首先会确认是否安装:

点击”yes”继续:

此时已经进入msi的安装过程中,根据提示进行配置即可。
优点
前面我们提到,要以管理员权限运行msi安装包是不太方便的,但包装成exe后就方便多了。
另外是为msi安装包传递参数。这里有两个问题,第一还是不方便。第二,让用户去指定安装参数是不太人道的!
我们可以通过下面的配置文件解决参数传递的问题:
;!@Install@!UTF-8! Title="Demo msi" BeginPrompt="Do you want to install the xxx?" ExecuteFile="msiexec.exe" ExecuteParameters="/i myapp.msi /log c:\abc.log" ;!@InstallEnd@!
好了,这下我们可以轻松拿到安装日志了。
对于最终用户来说msi是一种不常见的、专业的文件类型,包装成exe对用户来说也更友好。
安装文件的Icon
到目前为止我们只做的安装包都是这个样子的:

这可没有一点专业的感觉呀!至少应该有个Icon吧!
我们可以去网上找一个叫ResourceHacker的工具,用它可以把默认的Icon文件替换成我们自己的。下面的样子看起来是不是会专业一些:

总结,使用7z创建安装包既可以实现简单小巧的安装场景又可以解决一些复杂安装过程中的问题,真可谓老少咸宜!
7z制作自解压安装包的更多相关文章
- 使用7-zip制作自解压安装包
7-zip制作自解压包很方便,只要在压缩时选择”创建自释放程序”选项. 而自解压安装包有点麻烦,不如WinRAR方便. 准备工具:下载 LZMA SDK 这里面有 7zSD.sfx (16.04版7z ...
- 使用WinRar软件制作程序安装包
之前我写过使用好压软件打包程序,见随笔: 使用好压(HaoZip)软件打包EverEdit制作安装程序 - Fetty - 博客园http://www.cnblogs.com/fetty/p/4907 ...
- 制作部署安装包:Inno Setup
制作部署安装包:Inno Setup 前一篇尝试Office 2003 VSTO的开发.部署有提到用VS开发一个简单的VSTO程序.打包C/S程序,我首先想到的是VS里自带的Setup Project ...
- installshield制作的安装包卸载时提示重启动的原因以及解决办法
原文:installshield制作的安装包卸载时提示重启动的原因以及解决办法 有时候卸载installshield制作的安装包程序,卸载完会提示是否重启电脑以完成所有卸载,产生这个提示的常见原因有如 ...
- C#进阶系列——使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)
前言:上篇C#进阶系列——使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)介绍了下使用Advanced Installer配置IIS和Web.confi ...
- DevExpress控件库 开发使用经验总结3 制作项目安装包
2015-01-27 使用DevExpress控件包开发C/S项目完成后,部署前需要制作本地安装包.本文还是使用“SetupFactory”安装工厂来制作安装包.在以前的系列文章中详细介绍过该工具的使 ...
- 使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)
前言:上篇使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)介绍了下使用Advanced Installer配置IIS和Web.config的过程,操作起 ...
- 使用Qt Installer Framework制作软件安装包
概述 Qt Installer Framework(缩写QIF)是Qt官方用于生成软件安装包的工具.包括Qt Creator和Qt Installer Framework自身的安装包都是由这个工具制作 ...
- InstallShield制作升级安装包
1. 在General Information里,修改Product Version为新的版本号,此版本号应大于旧的版本号.点击Product Code右面的{...},获取一个新的Product C ...
随机推荐
- 使用decode函数实现统计
从上个星期起就在开始做统计图,各种统计图,昨天做的统计效果图如下: 在这里要根据工作平台和机构做统计,其中当字段A等于某个值时需要统计起来,也就是说假设等于2时需要做统计,字段 ...
- [ACM_几何] F. 3D Triangles (三维三角行相交)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28235#problem/A 题目大意:给出三维空间两个三角形三个顶点,判断二者是否有公共 ...
- Linux下Java开发环境搭建—CentOS下Mysql安装教程
本人学习Linux时使用的是CentOs5.5版本,在该环境中,Mysql的安装方法有很多种,下面我只讲我这次成功了的方法,作为一个记录,供大家参考,同时给自己做一个笔记. MySQL下载 1.进入网 ...
- 基于Vue封装分页组件
使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px;} ...
- Redis学习笔记~常用命令总结
回到目录 客户端redis-cli常用的命令总结 连接到服务器 redis-cli -h 127.0.0.1 -p 6379 --连接指定的redis服务器 发布/订阅, pub/sub模式运行在re ...
- MySQL账户安全设置
一般来说,安装完MySQL后,默认的用户是root,密码123456,外网不能访问. 有时候也希望在外网访问,则可以添加一个账户.建议不要用root. 如下表,存在安全问题: mysql> se ...
- Nginx下WordPress的Rewrite
最近接触WP Super Cache,该插件要求固定链接必须是重写的,故用到Rewrite. 我的是这样配置的: /usr/local/nginx/conf/rewrite/wordpress.con ...
- Node.js入门:Hello World
马上开始我们第一个Node.js应用:“Hello World”.打开你的编辑器,创建一个hello.js文件.编写代码保存该文件,并通过Node.js来执行. 控制台输出 1 console.log ...
- 函数柯理化以及利用柯理化实现bind方法
1.函数柯理化 把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术. 柯理化函数思想:一个js预先处理的思想:利用函数执行可以形 ...
- Atititi tesseract使用总结
Atititi tesseract使用总结 消除bug,优化,重新发布.当前版本为3.02 项目下载地址为:http://code.google.com/p/tesseract-ocr. Window ...