win-rar 0.1.0

A Windows archive manager supporting ZIP, 7z, RAR, TAR with encryption, shell integration, and drag-and-drop
docs.rs failed to build win-rar-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

WinRAR

一款基于 Tauri 2 + React 构建的 Windows 原生压缩解压工具,支持 ZIP、7z、RAR、TAR 等主流格式的压缩与解压。

为什么选择 WinRAR?

  • 多格式支持 — ZIP、7z、RAR、TAR、TAR.GZ、TAR.BZ2、TAR.XZ 一站式覆盖
  • 原生性能 — 基于 Tauri 2 框架,Rust 后端 + WebView 前端,安装包小、启动快、内存占用低
  • 安全可靠 — 内置 Zip Slip 路径遍历攻击防护,所有解压路径均经过安全校验
  • 加密保护 — 支持 ZIP/7z 密码加密压缩与解压,AES-256 加密算法
  • 右键集成 — 注册 Windows 右键菜单,右键即可"用 WinRAR 打开"或"解压到当前目录"
  • 拖放操作 — 拖入压缩文件自动解压,拖入普通文件自动进入压缩模式
  • 选择性解压 — 支持勾选部分文件单独解压,无需解压整个归档
  • 实时进度 — 解压/压缩过程实时显示进度百分比和当前文件
  • 分卷压缩 — 支持自定义分卷大小(如 100MB、1GB)
  • 密码重试 — 解压加密文件时支持最多 3 次密码重试,无需重新操作

功能概览

功能 ZIP 7z RAR TAR TAR.GZ TAR.BZ2 TAR.XZ
解压
压缩 ⚠️
密码加密 - - - - -
选择性解压

⚠️ RAR 压缩需要系统安装 WinRAR(自动检测)

快速开始

环境要求

  • Node.js >= 18
  • Rust >= 1.70(推荐通过 rustup 安装)
  • Windows 10/11

安装依赖

# 安装前端依赖
npm install

# Rust 依赖会在首次构建时自动安装

开发模式

npm run tauri dev

启动后即可在开发窗口中调试应用,前端热更新,后端修改自动重编译。

构建发布

npm run tauri build

构建产物位于 src-tauri/target/release/bundle/,包含 MSI 安装包和 NSIS 安装包。

使用说明

解压文件

  1. 点击"打开"按钮或拖放压缩文件到窗口
  2. 浏览归档内文件列表,可勾选需要解压的文件
  3. 点击"解压"按钮,选择输出目录
  4. 如文件加密,会弹出密码输入框(最多重试 3 次)

压缩文件

  1. 点击"压缩"按钮或拖放普通文件到窗口
  2. 在压缩对话框中设置:
    • 归档格式(ZIP / 7z / TAR.GZ / TAR.BZ2 / TAR.XZ / TAR / RAR)
    • 输出路径
    • 密码(可选)
    • 压缩级别(仅存储 / 最快 / 快速 / 标准 / 较好 / 最佳)
    • 分卷大小(可选,如 100m1g
  3. 点击"确定"开始压缩

右键菜单

安装后自动注册 Windows 右键菜单:

  • 压缩文件右键 → 用 WinRAR 打开 / 解压到当前目录
  • 文件夹右键 → 添加到压缩包...

二次开发

项目结构

win-rar/
├── src/                          # 前端(React + TypeScript)
│   ├── App.tsx                   # 主应用组件
│   ├── types.ts                  # 类型定义
│   ├── main.tsx                  # 入口
│   └── components/
│       ├── CompressDialog.tsx    # 压缩对话框
│       ├── FileList.tsx          # 文件列表
│       ├── DropZone.tsx          # 拖放区域
│       ├── ContextMenu.tsx       # 右键菜单
│       ├── ProgressBar.tsx       # 进度条
│       └── SettingsDialog.tsx    # 设置对话框
├── src-tauri/                    # 后端(Rust + Tauri)
│   ├── src/
│   │   ├── lib.rs                # 应用入口与初始化
│   │   ├── main.rs               # 主函数
│   │   ├── shell.rs              # Windows 右键菜单注册
│   │   ├── archive/              # 压缩格式引擎
│   │   │   ├── types.rs          # 公共类型与安全工具
│   │   │   ├── zip_engine.rs     # ZIP 引擎
│   │   │   ├── rar_engine.rs     # RAR 引擎
│   │   │   ├── sevenz_engine.rs  # 7z 引擎
│   │   │   └── tar_engine.rs     # TAR 系列引擎
│   │   ├── commands/             # Tauri 命令
│   │   │   ├── archive.rs        # 压缩/解压命令
│   │   │   ├── system.rs         # 系统对话框命令
│   │   │   └── shell.rs          # 右键菜单命令
│   │   └── async_ops/            # 异步任务管理
│   ├── Cargo.toml                # Rust 依赖
│   └── tauri.conf.json           # Tauri 配置
├── package.json
└── README.md

添加新格式支持

  1. src-tauri/src/archive/ 下创建新引擎文件(如 zstd_engine.rs
  2. 实现 list()extract() 函数,遵循现有引擎的接口模式
  3. types.rsArchiveFormat 枚举中添加新格式
  4. commands/archive.rsextract_archivecompress_files 中添加匹配分支
  5. 前端 types.ts 中同步添加格式类型

添加新 Tauri 命令

  1. src-tauri/src/commands/ 下实现命令函数,添加 #[tauri::command]
  2. lib.rsinvoke_handler 中注册
  3. 前端通过 invoke("command_name", { args }) 调用

技术栈

层级 技术
框架 Tauri 2
前端 React 18 + TypeScript + Vite
后端 Rust
ZIP zip
RAR unrar-ng
7z sevenz-rust
TAR tar + flate2 + bzip2 + xz2

Bug 反馈

如果发现 Bug,请发送邮件至 gyfinjava@163.com,邮件中请包含:

  • 操作系统版本
  • 复现步骤
  • 期望行为与实际行为
  • 相关截图或错误日志

定制开发与技术服务

如需定制开发或技术服务,请通过邮箱联络:gyfinjava@163.com

开源协议

本项目基于 MIT 协议 开源。

Copyright (c) 北京锋通科技有限公司 — 郭玉峰、吴琼