• 注册
  • 网络技术 网络技术 关注:78 内容:560

    自挂载 一种很新的单文件打包方法

  • 查看作者
  • 打赏作者
  • 当前位置: 七七博客 > 网络技术 > 正文
    • 网络技术
    • 自挂载 一种很新的单文件打包方法

      说明

      与单文件自解压程序 ( 以下简称自解压程序 ) 相似,单文件自挂载程序(以下简称自挂载程序)也是通过可执行文件模块+文件数据模块实现不需要其他软件的支持,自己对自己执行挂载操作,自挂载程序相较于自解压程序的优点是:自挂载操作理论上不需要进行磁盘上的复制,可以直接通过映射访问单文件程序内部的数据。这样就可以减少程序的时间复杂度/执行步骤,从而加快单文件程序启动速度。

      实现

      1、本文的实现是基于wim和cmd的,主要利用了如下特性;

          a.wim(windows NT6标准安装包格式)文件可以通过dism快速挂载到任意空文件夹

          b.cmd.exe运行批处理文件时会跳过无效的命令

          c.所依赖的组件只有两个:cmd.exe和dism.exe,不会出现没有运行库之类的问题

      2、此处以”360驱动大师网卡版”为例,方法大致如下

      自挂载 一种很新的单文件打包方法

      3、我们先将装着需要打包的程序的文件夹和一个批处理放入一个空文件夹中,如图所示。注意,这一层目录可以有若干个文件夹,但只能有批处理这一个文件。

      4、编辑这个批处理文件,它的代码流程如下所示;

          a.空三行(必须,以防cmd将下一条与文件头部数据作为一行处理)

          b.获取管理员权限

          c.创建挂载所需的文件夹

          d.调用dism.exe以wim方式挂载文件”%0″(%0是批处理文件自身,这里就是自挂载的核心部分)

          e.运行绿化程序(若有)

          f.运行主程序

          g.运行残留清理程序(若有)

          h.调用dism.exe将”%0″文件的挂载卸除

          i.退出脚本

          j.空三行(必须,以防cmd将上一条与其余文件数据作为一行处理)

      5、使用任意打包工具对这个文件夹进行打包,此处作者使用wimtool,步骤如下;

         a.以管理员身份打开wimtool,打开“新制与追加”一页

         b.点击“配置文件”按钮,进入配置文件编辑页面

         c.在[CompressionEXlusionList]行下插入一行,填入*.bat

         d.点击应用

         e.(可选)点击“压缩类型”选择最大压缩

         f.填入wim文件名和打包路径,开始打包

      6、将打包好的wim文件扩展名直接改为.bat或.cmd

      实际使用时的情况

      优点:自挂载程序加载速度明显比自解压程序快,360驱动大师的两种单文件版本在作者的win11虚拟机中冷启动时,自挂载启动用时14s,自解压启动用时25s。理论上在同性能硬件环境下,加载越大的程序,自挂载越有优势。

      缺点:有一个黑框框,而且wim压缩比没有7z高。

      理论上vhd和iso也可以用于自挂载程序的。

      扩展

      bat可以调用vbs脚本实现隐藏窗口,而且这个wim的文件结构还可以优化。

      其实只要在按名称排序时,bat在第一个就行了,最简单的办法就是在bat文件前加感叹号。

      这种方法其实还有一个优点,就是在程序自动升级或是修改设置后还能打包回单文件,而自解压是做不到的。

      隐藏内容需要回复可以看见

      回复

      请登录之后再进行评论

      登录
    • 任务系统
    • 帖子间隔 侧栏位置: