如何在 Windows 上卸载 WinSCP
WinSCP 把站点列表和设置存在注册表里,不在数据文件夹里,所以直接卸载不会清掉你保存的连接。这份指南覆盖用 WinSCP.WinSCP winget 包按机器安装的 WinSCP,这个包在 64 位和 arm64 Windows 上装的也是 x86 版本。
先退出 WinSCP
关掉所有 WinSCP 窗口和正在进行的传输。卸载前在任务管理器(Ctrl+Shift+Esc)里确认没有 WinSCP.exe 还在。
用自带的卸载器移除应用
打开「设置 › 应用 › 已安装的应用」,找到 WinSCP,选择卸载,或者运行:
winget uninstall --id WinSCP.WinSCP
先备份保存的站点
你保存的站点列表、选择保存的密码和偏好设置都存在注册表里,不是文件。打开 regedit,找到 HKEY_CURRENT_USER\SOFTWARE\Martin Prikryl\WinSCP 2,想保留站点的话先导出这个键(文件 › 导出)再卸载。
数据分别在哪里
| 位置 | 里面是什么 | 如何处理 |
|---|---|---|
HKCU\SOFTWARE\Martin Prikryl\WinSCP 2 |
保存的站点、你选择保存的密码、偏好设置 | 先导出这个键,卸载器不会动它 |
%APPDATA%\winscp.rnd |
WinSCP 为加密写的一个随机种子文件 | 可以删,下次运行会重新生成 |
检查结果
卸载完成后运行下面几条只读命令:
Get-Process WinSCP -ErrorAction SilentlyContinue
winget list --id WinSCP.WinSCP
Test-Path "${env:ProgramFiles(x86)}\WinSCP"
Get-Item "HKCU:\SOFTWARE\Martin Prikryl\WinSCP 2" -ErrorAction SilentlyContinue
Get-Process没有输出只表示未观察到匹配进程,被忽略的查询错误不能当作已经退出。winget list正常完成且没有匹配,才说明包记录已经没了;列出一行,说明卸载没完成。Test-Path返回False,说明程序目录已经没了;返回True,说明那里还有文件。Get-Item查注册表键,只要你保存过站点或改过偏好设置就会打印出来;卸载应用不会动它,备份好之后想完全清空可以自己删掉。
用 winget 安装时
winget uninstall 运行的是「设置 › 应用」用的同一个 Inno Setup 卸载器,删的是同一批程序文件,不会动注册表里你保存的站点和偏好设置。
Mole 会列出什么
对按机器安装的 winget 版 WinSCP:
- 程序目录、公共开始菜单快捷方式和公共桌面快捷方式默认勾选。
HKCU\SOFTWARE\Martin Prikryl\WinSCP 2里保存的站点,以及winscp.rnd种子文件,目前都不在列表里。WinSCP 自己登记的dav、davs、ftpes、ftps、s3、scp、sftp、ssh这些协议是别的应用也可能登记的共用名字,Mole 不会去动它们。
这次检查覆盖了什么
测试的是通过 winget 用 x86 版 Inno Setup 按机器安装的 WinSCP 6.5.6。这次没有保存过站点。
