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文件替换成我们自己的。下面的样子看起来是不是会专业一些:

 



















本文转自xmgdc51CTO博客,原文链接:http://blog.51cto.com/12953214/1942274 ,如需转载请自行联系原作者



相关文章
|
Shell 文件存储 Android开发
智能电视安装VLC配合frpc实现播放远程群晖NAS上的电影
智能电视安装VLC配合frpc实现播放远程群晖NAS上的电影
3289 0
|
4月前
|
SQL XML JSON
Notepad++高效排版技巧:从代码到文本的全方位优化指南
本文详解Notepad++高效文本处理技巧:列模式编辑、正则替换(如清理空行/格式化日期)、宏录制自动化、核心插件(JSON Viewer/TextFX)及多文件批量处理,助程序员与数据工作者大幅提升效率。(239字)
556 3
|
9月前
|
SQL 人工智能 分布式计算
ODPS十五周年实录|构建 AI 时代的大数据基础设施
本文根据 ODPS 十五周年·年度升级发布实录整理而成,演讲信息如下: 张治国:阿里云智能集团技术研究员、阿里云智能计算平台事业部 ODPS-MaxCompute 负责人 活动:【数据进化·AI 启航】ODPS 年度升级发布
421 9
|
6月前
|
运维 监控 数据可视化
别再手画 Visio 了!如何实现 L2/L3 层网络拓扑自动发现与实时监控?
运维十年老兵感慨:网络故障如黑屋寻针。OpManager以SNMP自动构建动态拓扑,实现全网可视,精准定位根因,屏蔽无效告警,让运维从“盲人摸象”变为“一目了然”,真正掌控复杂环境。
177 0
|
存储 Java 开发者
Java 中的 equals 方法:看似简单,实则深藏玄机
本文深入探讨了Java中`equals`方法的设计与实现。默认情况下,`equals`仅比较对象引用是否相同。以`String`类为例,其重写了`equals`方法,通过引用判断、类型检查、长度对比及字符逐一比对,确保内容相等的逻辑。文章还强调了`equals`方法需遵循的五大原则(自反性、对称性等),以及与`hashCode`的关系,避免集合操作中的潜在问题。最后,对比了`instanceof`和`getClass()`在类型判断中的优劣,并总结了正确重写`equals`方法的重要性,帮助开发者提升代码质量。
890 1
|
弹性计算 API 云计算
使用LobeChat轻松打造私人智能聊天助手
阿里云计算巢提供了一键部署LobeChat的功能,无需下载代码或安装复杂依赖,通过简单几步即可搭建私人聊天助手,非常适合非技术人员。LobeChat是一款现代化设计的开源聊天应用,支持语音合成及多模态插件系统。部署前需确保已开通阿里云账号且余额充足。
使用LobeChat轻松打造私人智能聊天助手
|
存储 安全 网络安全
警惕baxia勒索病毒,您需要知道的预防和恢复方法。
在数字时代,网络安全威胁日益严峻,.baxia勒索病毒以其隐蔽的传播方式和强大的加密能力,成为企业和个人数据安全的重大隐患。本文深入分析.baxia勒索病毒的工作原理、传播途径及其危害,并提出应对策略,帮助读者防范这一威胁。如遇数据加密问题,可添加技术服务号(sjhf91)获取专业数据恢复支持。
1144 0
警惕baxia勒索病毒,您需要知道的预防和恢复方法。
|
网络协议 Python
python requests库如何使用http连接池降低延迟 keepalive复用连接
Python的`requests`库通过内置的连接池机制支持HTTP Keep-Alive特性,允许复用TCP连接以发送多个请求,减少连接开销。默认情况下,`requests`不显式禁用Keep-Alive,其行为取决于底层HTTP库(如urllib3)及服务器的支持。通过创建`Session`对象并自定义`HTTPAdapter`,可以调整连接池大小和重试策略,进一步优化连接复用。测试显示,使用`Session`和定制的`HTTPAdapter`比普通请求方法能显著减少连续请求间的时间消耗,体现了Keep-Alive的优势。
|
JavaScript
深入理解 Vue.js 中的`mapState`辅助函数:简化状态管理的秘密武器(上)
深入理解 Vue.js 中的`mapState`辅助函数:简化状态管理的秘密武器(上)
|
运维 应用服务中间件 nginx
【运维知识进阶篇】Nginx Location语法优先级详解
【运维知识进阶篇】Nginx Location语法优先级详解
413 0