Tauri 2 适配 Windows 7

Tauri 2 适配 Windows 7
狂犬主子
如果希望使用 Tauri 2 开发一个同时兼容 Windows 7 的桌面应用,可以通过 Rust + VC-LTL5 + YY-Thunks 的方式解决新版本 Rust 对旧版 Windows API 的兼容问题。
本文记录一套实际测试成功的配置。
1. 前置条件
本文测试环境:
1 | Tauri 2.11.1 Rust 1.97.1 (MSVC) Windows Windows 10 19045 x64 (Dev) / Windows 7 SP1 x64 |
1.1 Rust + MSVC环境
这个一般都有,就TLDR了。这里直接安装 VS2026。
1.2 VC-LTL5+YY-Thunks
这个一般没有,所以我们需要进行安装。
因为我自己的Scoop Bucket已经有了,所以我使用Scoop来安装:
1 | scoop bucket add https://github.com/xrgzs/sdoog.git scoop install sdoog/vc-ltl sdoog/yy-thunks |
1.3 创建 Tauri 2 项目
创建一个普通的 Tauri 2 项目:
1 | pnpm create tauri-app |
正常创建完成后,Tauri 的 src-tauri/Cargo.toml 类似:
1 | [package] name = "tauri-app" version = "0.1.0" description = "A Tauri App" authors = ["you"] edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] # The `_lib` suffix may seem redundant but it is necessary # to make the lib name unique and wouldn't conflict with the bin name. # This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519 name = "tauri_app_lib" crate-type = ["staticlib", "cdylib", "rlib"] [build-dependencies] tauri-build = { version = "2", features = [] } [dependencies] tauri = { version = "2", features = [] } tauri-plugin-opener = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" |
2. 添加 thunk-rs
这里使用 thunk-rs 来集成 VC-LTL5 和 YY-Thunks。
进入 src-tauri:
1 | cd src-tauri cargo add thunk-rs --build |
默认情况下,thunk-rs 会启用 XP 相关 feature,因此需要手动修改 Cargo.toml。
最终配置:
1 | [build-dependencies] tauri-build = { version = "2", features = [] } thunk-rs = { version = "0.3.5", default-features = false, features = ["win7", "lib", "subsystem_windows"] } |
这里三个 feature 分别非常重要:
win7:启用 Windows 7 对应的 YY-Thunks。lib:用于正确处理 Tauri 同时包含 library target 的情况。subsystem_windows:将最终 Windows 程序设置为 GUI subsystem,从而避免启动时出现额外的控制台窗口。
3. 修改 build.rs
Tauri 默认的:
1 | fn main() { tauri_build::build() } |
修改为:
1 | fn main() { thunk::thunk(); tauri_build::build(); } |
这样在编译过程中,thunk-rs 会自动将对应的 VC-LTL5 和 YY-Thunks 链接配置加入项目。
4. 构建
修改完成后:
1 | pnpm tauri build |
或者:
1 | cargo build --release |
成功时可以在构建输出中看到类似:
1 | VC-LTL5 Enabled: 6.0.6000.0(x64) YY-Thunks Enabled: Win7(x64) Subsystem is set to WINDOWS |
这说明已经进入最终链接过程。
5. 测试
为了避免 Edge WebView2 安装失败,这里手动安装好了 109 版本的 WebView2,下载地址:
Tip:Edge 安装包默认安装 Edge 到用户目录,但是也可以作为 Edge WebView2 安装包来使用,通过这种方法安装不会带自动更新程序(本身也停更了不需要):
1 | MicrosoftEdge_X64_109.0.1518.78_Stable.exe --msedgewebview --verbose-logging --do-not-launch-msedge --system-level |
将 src-tauri\target\release\bundle\nsis\tauri-app_0.1.0_x64-setup.exe 放入 Windows 7 机器安装。测试工作正常。

这个环境是打过补丁和安装了VC运行库的,那没打过补丁的 Windows 7 SP1 能用吗?实测也是可以的。下面是最小环境测试,整个系统仅安装了 Edge WebView2:

补充内容
为什么需要 YY-Thunks?
问题的核心并不是 Tauri 本身。现代 Rust 和现代 Windows 开发工具链可能会使用一些较新的 Windows API,而 Windows 7 并不存在这些 API。YY-Thunks 的作用就是在链接阶段提供兼容层,因此它可以让一些原本面向较新 Windows 的程序继续运行在 Windows 7 上。
【重要】为什么必须加 lib
这是整个过程中比较容易踩的坑。
如果不加的话,会出现下面这种情况,启动会带一个命令行窗口:

解决这个问题,加上 lib 是最终解决方案。
如果不加的话,会造成无法编译,因为 Tauri 项目并不是单纯生成一个 EXE,它同时包含:
1 | tauri-app.exe tauri_app_lib.dll |
项目的 Cargo.toml 中有:
1 | [lib] crate-type = ["staticlib", "cdylib", "rlib"] |
如果只配置:
1 | features = ["win7", "subsystem_windows"] |
在链接 tauri_app_lib.dll 时可能出现:
1 | LNK2019: unresolved external symbol main |
因为 subsystem_windows 会使链接器使用类似:
1 | /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup |
而 DLL 并不存在 main()。
加入:
1 | features = ["win7", "lib", "subsystem_windows"] |
之后,thunk-rs 可以正确区分 library target,从而解决这个链接错误。
附:thunk-rs 的 features
1 | [features] default = ["xp"] lib = [] subsystem_windows = [] vc_ltl_only = [] vista = [] win10 = ["win10_10240"] win10_10240 = [] win10_19041 = [] win7 = [] win8 = [] windows_vista = ["vista"] windows_xp = ["xp"] xp = [] |
需要注意:这不等于 Tauri 官方“无条件支持 Windows 7”
这里需要区分:“能够通过兼容层运行”和“官方当前版本完整支持 Windows 7”并不是完全相同的概念。正常情况下,Tauri v2是不支持Windows 7的。本文通过野路子实现在Windows7上运行,出现问题与官方无关。其次,Rust、第三方插件蹬都可能存在自己的最低系统要求。因此实际项目必须在Windows 7 SP1的真实环境或者虚拟机中测试。

