创建自解压可执行文件.exe
作者建议
我将文档发布到了多个平台,不同的平台阅读体验不同,排版也可能有区别,本人强烈建议直接点击下面的链接查看原始文档,因为下面的链接是原始文档,阅读体验极佳,排版美观,有目录结构,您可以很容易找到您想要阅读的章节。另外,文档一直持续更新,不断完善,内容更加准确且与时俱进。原始文档始终是最新版本的,其它平台中的文档可能已经过时了。
单击查看原始文档(持续更新中):《创建自解压可执行文件.exe》
如果您是在微信上查看此文章的,也可以直接点击文末的“阅读原文”查看原始文档
原创不易,如果对您有帮助,还请您一键三连[抱拳]
有任何问题都可以联系作者,文末有作者联系方式,欢迎交流。
引言
很多时候,一个脚本文件需要依赖别的文件,比如安装某个软件,脚本文件和安装包在同一个目录中,但是这样有个问题,就是不方便分发,最好是将其打包为一个自解压可执行文件(exe格式),给到用户,用户自然明白应该如何启动程序,本文重点介绍如何创建自解压可执行文件(self-extractor)。
创建自解压可执行文件的方法有很多,比如winrar和7zip都能实现,关于7zip如何创建exe可以参考这篇文章How to Create a Silent, Self-Extracting Installer for use with Windows Configuration Designer - Richard Balsley
不过,用7zip创建的exe文件,执行完毕后会自动删除解压出的文件和文件夹,这就导致了PSAppDeployToolkit中的重启提示无法生效,而且也无法自定义图标,当然了,或许是有办法,只是当前我还不知道如何实现。据我所知,用NSIS创建exe文件是最简单也最符合我的需求的。
用NSIS创建self-extractor
NSIS(Nullsoft Scriptable Install System)是一个专业的开源系统,用于创建Windows安装程序。它被设计得尽可能小和灵活,因此非常适合互联网分发。很多著名软件安装包都是用NSIS创建的,例如Adobe flash player,Google Gmail,McAfee,notepad++等。
本文以安装SapGui客户端为例,说明如何创建self-extractor,首先用PSAppDeployToolkit编写好脚本,PSAppDeployToolkit是一个用于安装或卸载软件的powershell脚本框架,在此框架下,可以非常方便地执行这些操作,PSAppDeployToolkit包含多个文件。
安装NSIS
首先先需要安装NSIS,参考资料中可以找到下载地址,NSIS并不是一个向导式的软件,有个非常关键的部分是NSIS的脚本文件(nsi格式),为了方便创建和修改这个脚本文件,建议在vs code中安装插件(先安装NSIS),如下图所示:
创建NSI脚本文件
然后创建一个nsi脚本文件,以下是安装SapGui的示例:
Name "SapGui770"
OutFile SapGui770_Installer_V1.0.exe
RequestExecutionLevel admin
SilentInstall silent
Icon "AppDeployToolkit\AppDeployToolkitLogo.ico"
Section
SetOutPath $TEMP\PSAppDeployToolkit
File /r AppDeployToolkit
File /r Files
File /nonfatal /r SupportFiles
File Deploy-Application.exe
File Deploy-Application.exe.config
File Deploy-Application.ps1
ExecWait "$TEMP\PSAppDeployToolkit\Deploy-Application.exe"
Sleep 10000
SetOutPath $TEMP
RMDir /r /REBOOTOK $TEMP\PSAppDeployToolkit
SectionEnd
对上述nsi文件做个简要介绍:
OutFile指的是生成的自解压文件的文件名(可以指定绝对路径,若不知道路径,则默认与脚本文件同目录);
RequestExecutionLevel指定安装程序执行权限,admin为需要管理员权限;
SetOutPath指定自解压文件解压路径,此处设置的是temp文件夹下的PSAppDeployToolkit文件;
file指的是需要加入自解压exe文件的文件,双击exe文件时,这些文件也会被解压。参数/r指的是递归;
ExecWait指的是执行命令,需要注意的是,若是不指定具体路径,也可以,只是如果直接从共享文件夹中双击自解压文件,则PSAppDeployToolkit弹出的toast通知不会显示详细信息,只有通知两字;
Sleep为等待指定时间,单位为ms;本配置文件添加这条命令的原因是,我发现如果没有这条命令,则PSAppDeployToolkit中的Show-InstallationRestartPrompt不起作用,这是因为这个函数依赖PSAppDeployToolkit文件夹中的某些文件,这些文件被删除后,就无法正常执行了,所以等待10秒钟,再删除解压出的文件;
RMDir表示删除目录,本文的脚本文件,删除解压出的文件。/REBOOTOK参数指的是若是无法删除文件或文件夹,则重启时再删除这些无法删除的文件或文件夹。
编译脚本文件
现在可以编译脚本文件以生成自解压可执行文件了,在VS code窗口中,按照下图所示操作:
现在就得到了自解压可执行文件(单个exe文件),在NSI脚本文件目录中可以找到此exe文件,接下来可以对此exe文件进行测试。
还有另外一种编译方法,就是直接使用NSIS程序,如下图所示
还可以设置压缩方法:
流行的Windows安装程序制作工具
2023年安装包制作工具有哪些?主流易用软件打包工具推荐_安装包打包工具_javaweb_research的博客-CSDN博客
参考资料
Scripting Reference (sourceforge.io)
Scripting Reference (sourceforge.io)
Super-Simple Self-Extracting Installer with NSIS – David E. Smith (davidsmith.is)
关注我们,获取更多IT开发运维实用工具与技巧!
github用户名: iamtornado
github个人首页: https://github.com/iamtornado
电子邮箱: 1426693102@qq.com
个人微信:tornadoami(也可以通过下面的二维码加我,之后我将您邀请进入AI技术交流群)