重装系统不应该从“还记得哪些软件”开始,而应该从一份可验证的状态清单开始。应用程序、语言运行时和个人数据必须分开处理:应用可以重新下载,版本和配置需要声明,浏览器资料、输入法词库与密钥则必须提前备份。

这份工作流记录我在 2026 年 7 月使用的 Windows 环境。版本号是当日快照,软件分组和恢复顺序才是长期维护的部分。

恢复目标

一次合格的重装必须恢复以下四层状态:

  1. Windows 功能、驱动、磁盘布局和用户环境变量。
  2. Scoop、mise、Winget 等软件所有权关系。
  3. 开发语言、全局命令与桌面应用。
  4. 浏览器资料、输入法词库、编辑器设置和项目凭据。

“软件能够启动”不是完成标准。命令解析路径、运行时版本、配置目录和关键数据都必须经过验证。

当前环境快照

范围 当前状态
注册表中的非系统应用 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 基础环境

  1. 完成 Windows Update、芯片组、显卡、网卡和显示器驱动。
  2. 恢复 G:\dev 目录结构和数据盘权限。
  3. 启用 WSL、虚拟化平台和需要的可选功能。
  4. 安装 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 listwinget 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

latestltsstable 能复现升级策略,不能复现完全相同的小版本。需要逐字节接近旧环境时,应把导出的实际版本写入临时恢复配置,完成项目验证后再切回滚动通道。

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 全局安装 typescriptvue-tsc。uv 管理 serena-agentwindows-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.yamlinstallation.yaml
  • rime-frost-schemas、自定义词典、luaopencc
  • sync 目录与用户词库同步文件
  • 已关闭小狼毫后生成的 *.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

桌面侧还要手动验证:

  1. Helium 能读取书签、扩展和站点设置。
  2. 小狼毫可以选择目标方案,个人词频仍然存在。
  3. VS Code 扩展、终端配置和 Git 签名正常。
  4. Android Studio 能识别 SDK、设备和 Gradle JDK。
  5. Docker Desktop 可以从 Debian WSL2 环境访问。

维护节奏

每次新增长期使用的软件时,必须记录它由 Scoop、mise、Winget、语言包管理器还是独立安装器负责。每月导出一次清单;在系统升级、磁盘调整和大规模工具升级前额外导出一次。

软件清单解决“安装什么”,配置备份解决“如何恢复成自己的环境”,验收命令解决“怎样确认恢复完成”。只有三部分都存在,重装流程才可重复。

参考