zoukankan      html  css  js  c++  java
  • 7z 命令行方式生成自解压exe

    一、下载

        7z是一个免费的工具,除了通过命令行的方式提供各种文件、压缩包相关的操作外,还提供了一种方式可以打出自解压的exe程序。该程序从运行到结束经历了三个流程:

    (1) 解压文件到用户临时目录;

    (2) 运行指定的启动程序/脚本;

    (3) 运行完之后退出删除解压文件;

       在网站 https://www.7-zip.org/  7z官网上可以下载最新的7z程序,运行安装,安装之后的目录结构为:

     

        其中 7-zip.chm是帮助文档,7z的许多命令行用法在该文档中均可查到;

        根据文档的说明,若想打出自解压的exe,需要在官网上下载 LZMA SDK包获取其中的 {SFX_Module}相关文件。

    二、配置

        根据chm手册了解到若想要打出自解压的exe,需要如下步骤:

    (1) 从LZMA SDK解压目录 bin 目录下将以下3个文件拷出放到7z的解压目录下。

    (2) 准备程序,这里比较简单,一个目录下三个文件,其中一个是启动脚本。

    (3) 准备config.txt,内容如下

    ;!@Install@!UTF-8!
    Title="Patch Tool"
    ExecuteFile="start.bat"
    ;!@InstallEnd@!

    (4) 准备生成exe的脚本文件,内容如下:

    del test.7z
    del test.exe
    
    set srcpath=%1%     //传递test文件夹目录绝对地址
    echo %srcpath%
    7z a test.7z "%srcpath%*" -r -mx -mf=BCJ2       //将test文件夹内所有文件压缩到7z包中,不包含test目录
    copy /b 7zSD.sfx + config.txt + test.7z test.exe

    (5) 将config.txt、生成exe的脚本、7z相关的文件放到一个目录下,如下

    通过以上步骤,exe自解压相关的内容基本配置完毕。

    三、运行

       直接运行 windowsExe.bat脚本,输入test目录绝对地址,会自动生成7z文件和exe文件,双击运行exe文件即可。

    四、知识点

        根据帮助文档的内容,可以得知 7z 提供了一下{SFX_Module}配置

    SFX_ModuleDescription
    7z.sfx SFX module (GUI version)
    7zCon.sfx SFX module (Console version)
    7zSD.sfx SFX module for installers (GUI version)
    7zS2.sfx small SFX module for installers (GUI version)
    7zS2con.sfx small SFX module for installers (Console version)

     生成自解压exe的命令必须是:copy /b 7zSD.sfx + **.txt + **.7z **.exe  (其中**.txt可选)。

    若将7zSD.sfx更换成表格中的不同sfx文件,会有不同结果如下:

    (1) 7z.sfx 

        实际上生成的仅是自解压功能的exe,双击exe,会出现解压界面,要求用户选择自解压的路径,但是 **.txt配置的内容均是无效的。仅是完成自解压的功能。

     (2) 7zCon.sfx 

          与(1) 的效果一致,也是仅完成自解压的功能,唯一区别在于双击exe,出现的是命令行,所有信息在命令行中输出。

    (3) 7zS 开头的sfx

          这类才是可安装的exe,自解压到临时目录,运行指定程序,区别在于自解压界面呈现的方式(有的是用户可视界面,有的是命令行界面)。

  • 相关阅读:
    npm脚本和package.json
    Vue官方文档笔记(二)
    Vue官方文档笔记
    2019windows上安装Mac OS 10.14过程详细截图
    三次握手四次挥手
    ==和equals的区别
    Stringbuffer和Stringbuilder的区别
    字符串拼接五种常用方法
    什么是线程以及保证线程安全
    什么是线程安全,怎样保证线程安全
  • 原文地址:https://www.cnblogs.com/sandyflower/p/9565075.html
Copyright © 2011-2022 走看看