-
-
[原创]7-Zip 单文件纯净版 (v26.00) - 静态编译 / 零DLL依赖 / UI美化
-
发表于: 1小时前 48
-

说明
7-Zip 原版右键菜单基于 COM Shell Extension,实现为 7-zip.dll 注入 explorer.exe。该机制在便携场景下会引入典型问题:模块常驻导致文件句柄占用,影响删除、覆盖及 U 盘卸载。基于此,对 7-Zip 26.00 源码做了一次裁剪与重组,目标是去掉 Shell 扩展依赖,转为纯进程外调用模型。目前在 Win7 / Win10 环境下做过基本测试。
????️ 实现要点
1. 架构重组(静态化)
- 合并 FM 与 7z Core,统一静态链接
- 移除
7-zip.dll/7zG.exe等拆分结构 - 最终产物为单一可执行文件(无运行时依赖)
本质上是把原本「GUI + DLL + Loader」结构,收敛为单进程内调用。
2. 右键菜单去 COM 化
原实现路径:
Explorer → COM → 7-zip.dll → In-proc 执行
调整后:
Explorer → Shell(注册表)→ 外部 EXE → 参数分发
关键点:
- 移除
IContextMenu/IShellExtInit相关实现 - 不再发生 in-proc 注入(explorer.exe 无 7-Zip 模块加载)
- 使用
%1/%*做参数透传
副作用:
- 失去级联菜单(Cascade Menu)能力
- 但避免了句柄锁定与 Explorer 稳定性问题
3. 菜单触发方式
- 基于静态注册表项,通过
%1/%*传参 - 在软件的“选项 -> 设置”中重构了 UI,新增了专属的【集成到系统右键菜单】原生复选框。勾选即写入注册表,取消即干净卸载,绝不留一丁点注册表残余
- Explorer 侧不做类型判断,统一分发到外部进程
实际控制逻辑在应用层处理。
4. 资源与配置调整
- 去除外部 Lang 依赖(编译期写入 RC)
- 移除文件关联相关 UI(避免覆盖系统默认行为)
- 精简设置项,仅保留必要入口
- 对部分图标及位图资源做了简单替换(非功能性修改,美化资源来自github)
5. 交互行为调整
- 拖拽到工具栏区域:按“打开”处理
- 拖拽到客户区(文件列表区域):按“压缩”处理
属于简单的消息分发区分(基于窗口区域判断)。
适用方向
- 便携工具链(U 盘 / PE)
- 需要避免 Explorer 注入的环境
对句柄占用 / 文件热替换敏感的场景
倾向无依赖、可直接删除的静态软件形态
整体可以理解为:
将 7-Zip 从「Shell 扩展型工具」改为「外部调用型工具」
不涉及功能增强,主要是执行模型的调整。
最后于 1小时前
被道破红尘编辑
,原因:
赞赏
他的文章
谁下载
无
赞赏
雪币:
留言: