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

[原创]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小时前 被道破红尘编辑 ,原因:
上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回