重装系统不应该从“还记得哪些软件”开始,而应该从一份可验证的状态清单开始。应用程序、语言运行时和个人数据必须分开处理:应用可以重新下载,版本和配置需要声明,浏览器资料、输入法词库与密钥则必须提前备份。
这份工作流记录我在 2026 年 7 月使用的 Windows 环境。版本号是当日快照,软件分组和恢复顺序才是长期维护的部分。
恢复目标
一次合格的重装必须恢复以下四层状态:
- Windows 功能、驱动、磁盘布局和用户环境变量。
- Scoop、mise、Winget 等软件所有权关系。
- 开发语言、全局命令与桌面应用。
- 浏览器资料、输入法词库、编辑器设置和项目凭据。
“软件能够启动”不是完成标准。命令解析路径、运行时版本、配置目录和关键数据都必须经过验证。
当前环境快照
| 范围 | 当前状态 |
|---|---|
| 注册表中的非系统应用 | 116 个 |
| Scoop 软件 | 80 个,其中 main 70 个、extras 10 个 |
| mise 活跃运行时 | 6 个 |
| npm 全局包 | 17 个 |
| Bun 全局包 | 2 个 |
| Python 环境包 | 90 个 |
| uv 工具 | 2 个 |
| Cargo / Go 全局工具 | 0 个 |
主要目录固定在 G: 盘:
G:\dev\managers\scoop Scoop
G:\dev\managers\mise\data mise 数据与运行时
G:\dev\home\.config\mise mise 声明配置
G:\dev\package-data npm、pnpm、Cargo、Android SDK 等数据
G:\dev\profiles\barna 可迁移的个人配置
G:\bin 稳定的命令入口
把工具与系统盘分离不能代替备份,但可以减少重装时需要重新下载和重新定位的数据。
重装前导出
先创建带日期的备份目录,再导出清单。导出文件只记录安装状态,不包含浏览器资料、登录凭据或输入法词库。
$stamp = Get-Date -Format 'yyyyMMdd'
$backup = "G:\dev\backup\windows-reinstall-$stamp"
New-Item -ItemType Directory -Path $backup -Force | Out-Null
scoop export | Set-Content "$backup\scoop.json" -Encoding utf8
winget export --output "$backup\winget.json" --accept-source-agreements
mise ls | Set-Content "$backup\mise.txt" -Encoding utf8
npm ls --global --depth=0 | Set-Content "$backup\npm-global.txt" -Encoding utf8
bun pm ls --global | Set-Content "$backup\bun-global.txt" -Encoding utf8
uv tool list | Set-Content "$backup\uv-tools.txt" -Encoding utf8
dotnet --list-sdks | Set-Content "$backup\dotnet-sdks.txt" -Encoding utf8
wsl --list --verbose | Set-Content "$backup\wsl.txt" -Encoding utf8
还需要单独备份这些数据:
| 数据 | 位置或处理方式 |
|---|---|
| mise 声明 | G:\dev\home\.config\mise\config.toml |
| Helium 用户资料 | C:\Users\barna\AppData\Local\imput\Helium\User Data |
| 小狼毫用户资料 | G:\dev\profiles\barna\AppData\Roaming\Rime |
| VS Code | 设置同步或用户配置与扩展清单 |
| SSH、GPG、云凭据 | 加密备份,禁止放入公开仓库 |
| WSL | 使用 wsl --export 为需要保留的发行版生成归档 |
Chromium 浏览器的密码和 Cookie 可能受 Windows DPAPI 保护。复制整个用户目录可以保留书签和大部分配置,但不能保证登录凭据能在新系统直接解密。
第一阶段:Windows 基础环境
- 完成 Windows Update、芯片组、显卡、网卡和显示器驱动。
- 恢复
G:\dev目录结构和数据盘权限。 - 启用 WSL、虚拟化平台和需要的可选功能。
- 安装 Git 和 PowerShell 7,再开始恢复其余命令行工具。
需要重新建立 Debian 时:
wsl --install -d Debian
wsl --status
wsl --list --verbose
Docker Desktop 应在 WSL2 正常工作后安装和验证。
第二阶段:Scoop
Scoop 负责命令行工具和一部分可移植桌面程序。先恢复自定义根目录,再安装 Scoop:
$env:SCOOP = 'G:\dev\managers\scoop'
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod https://get.scoop.sh | Invoke-Expression
scoop bucket add extras
scoop import G:\dev\backup\windows-reinstall-YYYYMMDD\scoop.json
scoop checkup
当前 Scoop 集合的主要组成如下:
| 分组 | 软件 |
|---|---|
| 文件与导航 | bat、eza、fd、fzf、ripgrep、rga、yazi、zoxide |
| 系统观察 | bottom、duf、dust、fastfetch、procs、tokei |
| Git 与安全 | git、gh、delta、difftastic、lazygit、gitleaks、gpg、age、sops、trivy |
| 检查与构建 | actionlint、hadolint、shellcheck、shfmt、typos、lychee、just |
| 文档与媒体 | ffmpeg、imagemagick、pandoc、poppler、qpdf、tesseract、libreoffice |
| 日常工具 | 7zip、aria2、everything、rclone、scrcpy、sqlite、starship、topgrade |
| 运行时管理 | mise、uv、PowerShell 7 |
不要让 Scoop 和 Winget 同时管理同一个软件。恢复后以 scoop list 和 winget list 检查重复所有权。
第三阶段:mise 与语言运行时
mise 配置使用策略通道,而不是固定补丁版本:
[tools]
bun = "latest"
go = "latest"
java = "latest"
node = "lts"
python = "latest"
rust = "stable"
恢复配置后执行:
mise install
mise doctor
mise current
2026-07-14 的活动版本为:
| 运行时 | 版本 |
|---|---|
| Bun | 1.3.14 |
| Node.js | 24.18.0 LTS |
| Python | 3.14.6 |
| Go | 1.26.4 |
| OpenJDK | 26.0.1 |
| Rust | 1.96.1 stable |
latest、lts 和 stable 能复现升级策略,不能复现完全相同的小版本。需要逐字节接近旧环境时,应把导出的实际版本写入临时恢复配置,完成项目验证后再切回滚动通道。
Java 必须同时检查命令解析和环境变量:
where.exe java
java -version
$env:JAVA_HOME
mise where java
当前 JAVA_HOME 已统一到 G:\dev\managers\mise\data\installs\java\26.0.1。Android Studio 继续使用 IDE 自带 JBR,命令行构建使用 mise Java。
第四阶段:JavaScript 与 Python 工具
npm 全局集合主要包含:
@antfu/ni @anthropic-ai/claude-code
@openai/codex @upstash/context7-mcp
codex-provider-sync eslint
gitnexus http-server
nodemon npm-check-updates
pnpm prettier
serve tsx
typescript vite
yarn
Bun 全局安装 typescript 和 vue-tsc。uv 管理 serena-agent 与 windows-mcp。全局包只保留跨项目命令;应用依赖必须继续写在各自仓库的锁文件中。
pnpm 的全局可执行目录为 G:\dev\package-data\pnpm\bin,它必须存在于用户 PATH:
$pnpmBin = 'G:\dev\package-data\pnpm\bin'
$userPath = [Environment]::GetEnvironmentVariable('Path', 'User')
$entries = @($userPath -split ';' | Where-Object { $_ })
if ($entries -notcontains $pnpmBin) {
[Environment]::SetEnvironmentVariable('Path', (($entries + $pnpmBin) -join ';'), 'User')
}
pnpm bin --global
第五阶段:桌面软件
桌面应用优先使用 Winget 或官方安装器。当前个人软件集合如下:
| 分组 | 软件 |
|---|---|
| 浏览器 | Helium、Chrome、Firefox、Edge Beta |
| 输入法 | 小狼毫 0.17.4,雾凇拼音配置 |
| IDE 与编辑器 | VS Code、Visual Studio Community、Android Studio、Kiro、Windsurf Next |
| API 与开发 | Postman、Apipost、微信开发者工具、Docker Desktop |
| AI 工具 | Cherry Studio、AI Toolbox、CC Switch、ZCode、Metapi |
| 网络工具 | Bettbox、FlClash、Clash Verge |
| 文件与剪贴板 | Bandizip、Ditto、IDM |
| 媒体与办公 | PotPlayer、qBittorrent、Microsoft 365、Premiere Pro、LibreOffice |
| 硬件诊断 | HWiNFO、CPU-Z |
Helium 和小狼毫可以直接通过 Winget 恢复:
winget install --id ImputNet.Helium --exact
winget install --id Rime.Weasel --exact
WeChat、Bandizip 和 PotPlayer 曾在注册表中显示第三方发布者 423Down。重装时不复用来源不明的安装包,改用软件官网、Microsoft Store 或能够核验清单的 Winget 来源。
小狼毫迁移规则
小狼毫程序和用户资料不能继续混在安装目录中。当前用户目录已经迁移为:
G:\dev\profiles\barna\AppData\Roaming\Rime
迁移前先通过小狼毫的“同步用户资料”功能生成一致的 *.userdb.txt,再复制以下内容:
*.custom.yaml与installation.yamlrime-frost-schemas、自定义词典、lua和openccsync目录与用户词库同步文件- 已关闭小狼毫后生成的
*.userdb数据库
build 是生成目录,weasel-* 是程序目录,不属于用户配置备份。修改目录或配置后必须重新部署,并验证实际用户目录:
Get-ItemPropertyValue 'HKCU:\Software\Rime\Weasel' RimeUserDir
最终验收
恢复完成后,新开一个 PowerShell 会话并执行:
scoop checkup
mise doctor
mise current
where.exe git node bun python go java rustc pnpm
git --version
node --version
bun --version
python --version
go version
java -version
rustc --version
pnpm bin --global
docker version
wsl --status
wsl --list --verbose
桌面侧还要手动验证:
- Helium 能读取书签、扩展和站点设置。
- 小狼毫可以选择目标方案,个人词频仍然存在。
- VS Code 扩展、终端配置和 Git 签名正常。
- Android Studio 能识别 SDK、设备和 Gradle JDK。
- Docker Desktop 可以从 Debian WSL2 环境访问。
维护节奏
每次新增长期使用的软件时,必须记录它由 Scoop、mise、Winget、语言包管理器还是独立安装器负责。每月导出一次清单;在系统升级、磁盘调整和大规模工具升级前额外导出一次。
软件清单解决“安装什么”,配置备份解决“如何恢复成自己的环境”,验收命令解决“怎样确认恢复完成”。只有三部分都存在,重装流程才可重复。