
这里先把话说明白OpenClaw 这类跑在 WSL 里的 AI 自动化服务框架卸载从来都不是控制面板 - 卸载程序点一下就完事的。它的本体藏在 Linux 子系统的文件系统里配置散在 Windows 的用户目录、环境变量、甚至注册表里如果只删桌面上的快捷方式过两天你会在wsl --status的报错里、在占用端口的进程里、在右键菜单的残留项里反复看到它的影子。这篇教程就是冲着彻底两个字去的覆盖的是一台典型 Windows 机器上 OpenClaw 可能留下的所有痕迹。文章会从卸载前的准备开始到四个层面的主卸载流程再到注册表、计划任务、socket 残留这类深层清剿最后给出验证命令和常见翻车现场的修复方法。不管你是当初用一键脚本部署的还是手工配了 Node.js Docker 环境按这个顺序走一遍机器基本能回到安装前的状态。1. 为什么 OpenClaw 卸载不干净先摸清它在 Windows 里的部署形态很多人卸载不干净不是因为操作不对而是不知道自己在删什么。OpenClaw 在 Windows 上不是单个.exe文件它默认跑在 WSL2 的发行版里通过 Linux 子系统访问主机资源同时依赖 Node.js 运行时、外部容器服务、一堆 npm 全局包还有 Windows 侧的配置文件和 PowerShell 环境变量。这几个层面相互交叉删漏任何一个都会留下半死不活的残留。1.1 OpenClaw 在 Windows 上通常装在哪几层我把一台装了 OpenClaw 的 Windows 机器拆开看它至少会在下面几个位置落东西WSL 子系统内部OpenClaw 的工作目录常见如~/openclaw或~/claw、配置文件config.yaml、日志目录、由包管理器拉取的依赖文件还有它注册的 systemd 服务或后台进程。Windows 用户目录%USERPROFILE%\.openclaw、%APPDATA%\openclaw、%LOCALAPPDATA%\openclaw这类隐藏配置目录存的是 token、会话数据、浏览器集成配置。Docker / 容器层如果部署时选择用容器跑数据库或中间件OpenClaw 对接 Elasticsearch、Redis 是常见组合那 Docker Desktop 里会挂着对应的镜像、容器和数据卷。环境变量与 PATH安装脚本通常会往用户级 PATH 里追加openclaw可执行文件路径还会在 PowerShell profile 里写初始化脚本或别名。计划任务与自启动项需要常驻响应的部署方式会在任务计划程序里注册开机自启任务或者往启动文件夹塞快捷方式。你对照这个清单检查自己机器基本就能明白为什么之前删完还有残留。1.2 哪些共用件不能随便删别把地板砖和家具一起扔要特别提醒一句OpenClaw 专属的东西要清干净但共用件不能跟着删。比如你机器上可能同时跑着其他 JavaScript 项目那全局的 Node.js 运行时不能因为卸载 OpenClaw 就移除Docker Desktop 如果还起着别的容器比如其他团队项目卸载时只清 OpenClaw 相关的镜像和容器即可别去卸载整个 Docker 服务WSL2 子系统本身在 Windows 里还承担着其他职责除非你确定 OpenClaw 是它唯一的用途否则不建议执行wsl --unregister把整个发行版删掉那样会误伤子系统里其他所有数据。这条边界想清楚后面每一步删什么、保留什么判断起来就顺手了。2. 卸载前的预备动作备份配置、停服务、盘点残留动手之前千万别跳过准备步骤。OpenClaw 的配置里往往存着各类服务的连接凭证、会话 token一旦删了没法找回。我见过有人直接删目录删完才想起来里面有一个重要的接入凭据没备份最后只能去服务端重新生成。这种事其实完全可以避免。2.1 备份配置文件的三种方式方式一整目录打包最省事在 Windows 命令行或 PowerShell 里把两个主要配置目录分别打成压缩包Compress-Archive -Path $env:USERPROFILE\.openclaw -DestinationPath $env:USERPROFILE\Desktop\openclaw-backup.zip Compress-Archive -Path $env:APPDATA\openclaw -DestinationPath $env:APPDATA\openclaw-backup.zip -Force方式二从 WSL 内部备份如果配置主体在 WSL 里先进入子系统再打包cd ~ tar -czf openclaw-backup.tar.gz .openclaw openclaw 2/dev/null cp openclaw-backup.tar.gz /mnt/c/Users/你的用户名/Desktop/方式三只备份关键文件如果只想留核心配置只拷贝config.yaml、.env、credentials.json这类文件也行。注意.env和 token 文件在 Linux 下通常是隐藏文件用ls -la才看得到。备份做完把备份包放到 OpenClaw 管不到的位置比如桌面、D 盘再继续下一步。2.2 停服务先让进程安静下来再拆活跃进程会锁住文件导致删除时报文件被占用。在管理员 PowerShell 里依次执行# 停掉所有可能属于 OpenClaw 的 node 进程这一步要谨慎确认没有其他 Node 项目在跑 Get-Process node -ErrorAction SilentlyContinue | Stop-Process -Force # 列出所有 WSL 发行版确认用的是哪个 wsl --list --verbose # 关闭 WSL 里正在运行的发行版OPENCLAW 是发行版名按实际情况替换 wsl --terminate OpenClaw如果你用的是 Docker 容器部署顺便把容器停掉docker ps --filter nameopenclaw --format table {{.Names}}\t{{.Image}} docker stop $(docker ps -q --filter nameopenclaw)这一步做扎实后面删除目录、删除镜像时遇到权限问题的概率会小很多。2.3 自查清单一台典型机器上会留下什么在动手之前建议你先跑一遍下面的盘点命令把 OpenClaw 在系统里的痕迹全部列出来# 1. 检查用户主目录和 AppData 下的相关目录 $paths ( $env:USERPROFILE\.openclaw, $env:APPDATA\openclaw, $env:APPDATA\npm\node_modules\openclaw, $env:LOCALAPPDATA\openclaw, $env:USERPROFILE\openclaw ) $paths | Where-Object { Test-Path $_ } # 2. 检查 PATH 里是否残留 openclaw 目录 $env:Path -split ; | Where-Object { $_ -match openclaw|claw } # 3. 检查 WSL 子系统里的部署目录 wsl -d OpenClaw -- bash -c ls -la ~ | grep -i claw; which openclaw 2/dev/null # 4. 检查计划任务 Get-ScheduledTask | Where-Object { $_.TaskName -match openclaw|claw } | Select-Object TaskName, State运行完这些你对这台机器上 OpenClaw 到底埋了多少雷就有数了。建议把结果截图或记下来后面每清一项就对照核销一项。3. 主卸载流程从上到下清除四个层面的 OpenClaw 痕迹准备工作做完进入正式卸载。我按子系统 - 容器 - Windows 应用目录 - 环境变量四个层面逐层清理每层之间有依赖顺序尽量别跳着来。3.1 删除 WSL 里的 OpenClaw 工作区与服务配置先进入 WSL 子系统删掉 OpenClaw 的工作目录和用户级配置# 进入子系统切换到部署 OpenClaw 的用户 wsl -d OpenClaw # 查看部署目录和配置文件位置 ls -la ~ | grep -i claw ls -la ~/.config | grep -i claw 2/dev/null # 删除主目录下的部署文件夹按实际名称替换 rm -rf ~/openclaw ~/.openclaw ~/.config/openclaw 2/dev/null # 如果有 systemd service 或 init 脚本一并移除 rm -f ~/.config/systemd/user/openclaw.service 2/dev/null rm -f /etc/systemd/system/openclaw.service 2/dev/null如果安装时往/usr/local/bin或/usr/bin里放过可执行文件软链也一起删sudo rm -f /usr/local/bin/openclaw /usr/bin/openclaw 2/dev/null目录删干净后检查一下~/.bashrc、~/.zshrc或~/.profile里有没有 OpenClaw 加进去的 alias、PATH 或自动启动命令。这一步很容易漏很多人删了目录但每次打开终端还是会有openclaw: command not found的报错就是因为 shell 配置文件里还引用着它。3.2 清理 Docker 容器、镜像与数据卷如果 OpenClaw 部署时用了 Docker常见的是用容器跑数据库或作为服务宿主接下来清容器层。注意只清 openclaw 相关的保留其他项目的容器# 查看所有容器确认哪些属于 OpenClaw docker ps -a --format table {{.Names}}\t{{.Image}}\t{{.Status}} # 删除相关容器按实际容器名替换 docker rm -f openclaw-container # 删除相关镜像 docker images | Select-String openclaw|claw docker rmi openclaw-image # 删除相关数据卷注意数据卷删除不可恢复确认无误再执行 docker volume ls | Select-String openclaw docker volume rm openclaw-data如果 OpenClaw 只是把 Docker 当作中间件的载体那相关的中间件容器也可以顺手清掉。清完可以执行docker system df看看空间释放情况。3.3 删除 Windows 侧的目录与配置文件回到 Windows 侧删除用户主目录和 AppData 下的残留目录$paths ( $env:USERPROFILE\.openclaw, $env:APPDATA\openclaw, $env:LOCALAPPDATA\openclaw, $env:USERPROFILE\openclaw, $env:USERPROFILE\.claw, $env:APPDATA\npm\node_modules\openclaw ) foreach ($p in $paths) { if (Test-Path $p) { Write-Host 删除 $p Remove-Item -Path $p -Recurse -Force } }如果安装时用的是带桌面 GUI 的版本还可能在%LOCALAPPDATA%\Programs\openclaw或%ProgramFiles%\openclaw下装了应用本体也要一并删除。同时检查开始菜单里的快捷方式和桌面快捷方式它们往往指向已经删除的路径留着只是摆设但会让系统显得很脏。3.4 清理环境变量、PATH 与 npm 全局包最后处理环境层面的残留。先清理 npm 全局包中的 OpenClaw 本体和它带来的 CLI 命令# 查看全局 npm 包里有没有 openclaw 相关模块 npm list -g --depth0 | Select-String openclaw|claw # 卸载全局包 npm uninstall -g openclaw # 如果还有相关辅助包一并卸载 npm uninstall -g openclaw/cli 2$null然后清理 PATH 和环境变量。打开系统属性 - 环境变量在用户变量和系统变量的 Path 里把包含openclaw字样的条目删掉。用命令行也可以查证# 查看当前进程的 Path确认哪些条目包含 openclaw $env:Path -split ; | Where-Object { $_ -match openclaw|claw } # 通过注册表查看持久化的用户 PATH 条目 Get-ItemProperty HKCU:\Environment | Select-Object -ExpandProperty Path如果安装脚本还把OPENCLAW_HOME之类的自定义变量写进了用户或系统环境变量在环境变量对话框里找到并删除。检查方法[System.Environment]::GetEnvironmentVariable(OPENCLAW_HOME, User) [System.Environment]::GetEnvironmentVariable(OPENCLAW_HOME, Machine)这一步做完主流程基本结束。但注意删掉环境变量后要重新打开终端窗口才生效旧窗口里还挂着删除前的环境。4. 深层清剿注册表、临时目录与终端 profile 里的暗雷主流程走完系统里八成还有一个或多个隐藏关卡。这些地方普通卸载工具根本不会碰但恰恰是它们让系统变得删了像没删一样。4.1 注册表残留为什么值得查一遍Windows 注册表是很多卸载程序的盲区。OpenClaw 如果带 GUI 或文件关联比如关联了某种配置文件格式就会往注册表里写东西。常见的残留位置有三个# 卸载信息里通常记录着软件名和卸载入口 Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Where-Object { $_.DisplayName -match openclaw|claw } # 用户级卸载记录 Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Where-Object { $_.DisplayName -match openclaw|claw } # 启动项注册表Run 键 Get-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Run | Format-List Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Run | Format-List查到带openclaw字样的键值后用reg delete删除。以用户级卸载信息为例Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall | Where-Object { (Get-ItemProperty $_.PSPath).DisplayName -match openclaw } | ForEach-Object { Remove-Item -Path $_.PSPath -Recurse -Force }对注册表操作要格外小心只动明确匹配 openclaw/claw 的键不要漫无目的地删。如果看某个键不确定它属于谁宁可先留着也不要盲目删除。4.2 终端启动脚本、PowerShell 模块与计划任务终端启动脚本是另一个常见暗雷。PowerShell 的 profile 文件位置是$PROFILE安装脚本喜欢在这里追加自动加载模块或设置 OPENCLAW 环境。检查方式# 打开 PowerShell profile 检查内容 notepad $PROFILE # 或者直接查看其中是否包含 openclaw 字样 Select-String -Path $PROFILE -Pattern openclaw|claw -SimpleMatch如果有手动删掉对应行。注意 profile 文件可能在Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1或Documents\PowerShell\Microsoft.PowerShell_profile.ps1取决于你用的 PowerShell 版本5.1 还是 7。两个位置都查一下更稳妥。计划任务也要查# 查询所有计划任务并筛选 Get-ScheduledTask | Where-Object { $_.TaskName -match openclaw|claw -or $_.Actions.Execute -match openclaw|claw } | ForEach-Object { Write-Host 删除计划任务: $($_.TaskName) Unregister-ScheduledTask -TaskName $_.TaskName -Confirm:$false }另外如果部署时在 Windows 侧创建了 Windows 服务比如通过 NSSM 包装的常驻进程用sc query openclaw查一下服务列表存在的话用管理员权限删除sc.exe stop openclaw sc.exe delete openclaw如果服务名不叫 openclaw 但可执行路径指向 OpenClaw 目录用Get-CimInstance Win32_Service | Where-Object { $_.PathName -match openclaw }查到后同样删除。4.3 端口被占用怎么办socket 残留排查很多人在卸载后发现端口被占用的报错其实这是 OpenClaw 相关进程留下 socket 监听未释放或者 Windows 的端口排除规则里还残留着它的端口。热搜词里就有windows 关闭端口号说明这是卸载之后最常见的问题之一。排查命令# 查看端口占用情况把 3010 换成你部署时配置的端口 netstat -ano | Select-String 3010 # 按 PID 查看是哪个进程 Get-Process -Id (这里填上一步查到的 PID) # 如果该 PID 已经没有对应进程说明 socket 处于 TIME_WAIT 状态 # 通常等几分钟自动消失如果持久占用检查 docker-proxy 或 wslrelay Get-Process -Name docker-proxy -ErrorAction SilentlyContinue | Select-Object Id, ProcessName如果是 Docker 的端口映射残留容器已删但 docker-proxy 还占用端口重启 Docker Desktop 一般能释放。如果始终释放不了再去资源监视器 - 网络 - 侦听端口里查一遍对应的 PID确认对应进程是否真的还在跑。5. 卸载后验证与常见翻车现场修复整个清理流程走完最后一步是验证是不是真的干净了。这一节不只是给几条命令而是把最容易翻车的几个点单独拿出来讲透因为我在实际处理中见过大量同类问题十个里面有八个是同一个原因。5.1 验证卸载彻底的三条命令与检查顺序验证顺序建议按命令是否可用 - 目录是否残留 - 进程和端口是否清空 - WSL 状态是否正常来走# 1. 检查命令是否还能被找到应显示无法识别 Get-Command openclaw -ErrorAction SilentlyContinue where.exe openclaw # 2. 检查主要目录是否残留 Test-Path $env:USERPROFILE\.openclaw Test-Path $env:APPDATA\openclaw Test-Path $env:USERPROFILE\openclaw # 3. 检查进程 Get-Process | Where-Object { $_.ProcessName -match openclaw|claw } # 4. 检查 WSL 状态确认没有报错 wsl --status wsl --list --verbose四条命令都返回无结果或正常状态卸载就算基本干净了。特别是wsl --status当初安装部署时如果脚本对 WSL 配置做过修改比如改过默认版本、注册过镜像卸载后运行这一条能帮你确认子系统本身没有因此受损。5.2 最容易翻车的三个坑WSL 报错、权限拒绝、路径锁死坑一wsl --status报错或显示环境已损坏这不是卸载带来的问题往往是你之前部署 OpenClaw 时脚本修改了/etc/wsl.conf或注册了 systemd 服务卸载时我们删了服务文件但没恢复配置。处理方式进入 WSL 发行版检查/etc/wsl.conf里有没有 openclaw 相关段落确认是默认状态即可。如果整个 WSL 子系统确实被搞乱了且里面没有需要保留的数据最后手段是执行wsl --unregister OpenClaw把发行版整个移除再重新安装一个干净的发行版。这个操作不可逆用了之前请确认子系统里没有其他个人数据。坑二删除文件时提示权限不足或文件被占用优先检查是否有终端窗口还停留在 WSL 子系统的目录里或者 Docker Desktop、VS Code 等程序还持有该目录的句柄。关掉所有可能占用路径的程序后再删。如果还不行用管理员权限的 PowerShell 重试。有些隐藏文件或系统属性文件先取消只读属性再删除attrib -r -s -h C:\path\to\openclaw\*.* /s /d Remove-Item -Path C:\path\to\openclaw -Recurse -Force坑三删除后 PATH 里还有残留但终端不报错因为 PATH 的修改只对之后新开的进程生效。删完环境变量后务必彻底退出并重新打开终端如果有 VS Code 之类的编辑器开着也一并重启否则它的集成终端里还是会看到旧的环境变量。这是为什么我清完了还在报错的高频原因。5.3 准备重装的话这些事一定要提前知道如果你想在清干净之后重新部署 OpenClaw我建议你在卸载完成后做一次快照式检查记录自己的系统版本、WSL 内核版本、Node.js 版本这些参数在重装时最容易踩兼容性的坑。另一个建议是重装前先确认好这次要用哪种部署形态纯 WSL 还是 Docker 容器不同形态产生的残留位置不一样以后卸载时的清理路径也不一样。选一种方式走到黑别两种混着来混着部署是残留的最大来源。我实际见过最惨的情况是先用了脚本一键部署后来嫌不好用又改成 Docker 部署中间又升级过几次版本最后卸载时 WSL 里、容器里、Windows 目录里各有一份残留排查花了一整个下午。所以如果你准备重装请务必想清楚部署方式再动手。写在最后的一点实际体会做了这么多年的环境清理我最深的感受是卸载比安装更能检验一台机器是否健康。安装是一路放东西卸载是把东西拿干净而 OpenClaw 这类跨 Windows 和 WSL 两个世界部署的框架天然就是残留大户。每次清理我都是抱着宁可多删十处不可放过一处的心态但同时又把共用件不误伤这条红线绷得紧紧的。最后分享一个我个人的操作习惯清理过程中每执行完一个大步骤就把命令输出截图存一下。别嫌麻烦真遇到清完还报错的时候这些截图能帮你快速定位到底哪一步没走干净。另外在做任何不可逆删除尤其是注册表和wsl --unregister之前强制自己先做一次备份这个习惯救过我很多次。照着你机器上的实际情况把上面的步骤走一遍OpenClaw 基本能从你的 Windows 系统里干干净净地退场。