好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 3I5105 于 2023-6-29 21:56 编辑
一、定义
因为似乎没见过用这种方法打包的单文件程序,所以作者自己给它起了一个名字。与单文件自解压程序 ( 以下简称自解压程序 ) 相似,单文件自挂载程序(以下简称自挂载程序)也是通过可执行文件模块+文件数据模块实现不需要其他软件的支持,自己对自己执行挂载操作
自挂载程序相较于自解压程序的优点是:自挂载操作理论上不需要进行磁盘上的复制,可以直接通过映射访问单文件程序内部的数据。这样就可以减少程序的时间复杂度/执行步骤,从而加快单文件程序启动速度
二、实现
作者的实现是基于wim和cmd的,主要利用了如下特性
1.wim(windows NT6标准安装包格式)文件可以通过dism快速挂载到任意空文件夹
2.cmd.exe运行批处理文件时会跳过无效的命令
(所以依赖的组件只有两个:cmd.exe和dism.exe,不会出现没有运行库之类的问题)
此处以"360驱动大师网卡版"为例,方法大致如下
1.我们先将装着需要打包的程序的文件夹和一个批处理放入一个空文件夹中,如图所示。注意,这一层目录可以有若干个文件夹,但只能有批处理这一个文件
2.编辑这个批处理文件,它的代码流程如下所示
a.空三行(必须,以防cmd将下一条与文件头部数据作为一行处理)
b.获取管理员权限
c.创建挂载所需的文件夹
d.调用dism.exe以wim方式挂载文件"%0"(%0是批处理文件自身,这里就是自挂载的核心部分)
e.运行绿化程序(若有)
f.运行主程序
g.运行残留清理程序(若有)
h.调用dism.exe将"%0"文件的挂载卸除
i.退出脚本
j.空三行(必须,以防cmd将上一条与其余文件数据作为一行处理)
3.使用任意打包工具对这个文件夹进行打包,此处作者使用wimtool,步骤如下
a.以管理员身份打开wimtool,打开“新制与追加”一页
b.点击“配置文件”按钮,进入配置文件编辑页面
c.在[CompressionEXlusionList]行下插入一行,填入*.bat
d.点击应用
e.(可选)点击“压缩类型”选择最大压缩
f.填入wim文件名和打包路径,开始打包
4.将打包好的wim文件扩展名直接改为.bat或.cmd
三、效果
样本文件:
https://www.123pan.com/s/uTv8Vv-2Fu0A.html
实际使用时的情况:
优点:自挂载程序加载速度明显比自解压程序快,360驱动大师的两种单文件版本在作者的win11虚拟机中冷启动时,自挂载启动用时14s,自解压启动用时25s。理论上在同性能硬件环境下,加载越大的程序,自挂载越有优势
缺点:有一个黑框框(如图所示),而且wim压缩比没有7z高
PS:理论上vhd和iso也可以用于自挂载程序的,剩下的就等大家来改进啦!等我们这边初一放暑假我再回来玩awa |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|