Clash Verge Rev 多版本共存安装方案
有时候一个版本不够用。你可能需要在主力机上同时跑稳定版做日常代理,再挂一个预发布版测试新功能的兼容性;或者想保留旧版本作为回退方案,又不想每次都卸载重装;甚至只是想在调试某个订阅问题时,让两个配置互不干扰地并行运行。Clash Verge Rev 本身没有“多开”按钮,但通过便携版隔离、配置目录分离和端口分配,完全可以做到两个版本在同一台机器上和平共处。这篇方案针对 Clash Verge Rev 多版本共存 的需求,假定你已经熟悉基础操作和配置文件结构,直接从多实例的技术实现切入。

01. 为什么默认装不了两个版本
Clash Verge Rev 的常规安装方式决定了它天然是“单实例”的。安装版把程序写进 %LOCALAPPDATA%\Clash Verge Rev,把配置统一存到 C:\Users\用户名\.config\clash-verge\,两个版本共享同一个路径,后安装的版本会直接覆盖前一个版本的配置。同时,所有实例都监听同一个混合端口(默认 7897),第二个实例启动时内核会因为端口被占用而启动失败。
更麻烦的是服务模式。如果你在旧版本里安装过 TUN 服务,服务注册是全局的,新版本启动时会检测到冲突。项目的多个 Release Notes 中反复强调“建议卸载旧版本后再安装新版本”,因为两个版本同时注册服务会导致 IPC 通信混乱。
解决思路是逐层隔离:程序层面用便携版实现物理隔离,配置层面用不同的目录区分数据,端口层面手动分配互不重叠的监听端口,服务层面只保留一个版本安装服务。 下面按这个顺序展开。
02. Clash Verge Rev 多版本共存:用便携版实现程序隔离
最干净的共存方案是:安装版跑主力版本,便携版跑测试版本。安装版享受自动更新和系统集成,便携版放在独立目录里做隔离实验。
便携版的运行机制是检测可执行文件同目录下是否存在 .config/PORTABLE 标记文件。如果存在,程序就把所有配置数据写在程序目录下的 .config 文件夹里,不向用户目录写入任何东西。这意味着你可以把两个便携版分别解压到不同目录,各自拥有独立的程序文件和配置,互不干扰。
操作方式是从 GitHub Release 页面下载 x64_portable.zip,解压到两个不同的目录,比如 D:\ClashVerge-Stable 和 D:\ClashVerge-Test。每个目录里确认 .config/PORTABLE 文件存在,然后分别双击各自的 clash-verge.exe 启动。
需要注意几点:便携版所在的目录必须有写入权限,否则配置无法保存,程序会报错或降级为只读模式。便携版在检测到便携模式激活时,会主动跳过应用内自动更新。这是设计上的决定,不是 bug。升级便携版需要手动下载新版本的 x64_portable.zip,解压后覆盖程序文件。如果目标机器缺少 WebView2 Runtime,便携版也需要系统预装,或者使用带 fixed_webview2 的构建版本。
03. 配置目录的彻底分离
如果你坚持用两个安装版共存,或者想给便携版和安装版各配一套完全独立的配置数据,配置目录的隔离是必须处理的环节。
安装版的配置目录由 verge.yaml 和 profiles 子目录组成,后者存放所有订阅解析后的 YAML 文件。默认路径是 C:\Users\用户名\.config\clash-verge\。如果你想让第二个实例使用不同的配置目录,可以把它做成便携模式:在第二个实例的程序目录下新建 .config 文件夹,里面放一个名为 PORTABLE 的空文件。程序重启后会检测到这个标记,自动把配置数据迁移到程序目录下。
反过来,如果两个实例都是安装版,直接共用同一个配置目录会导致订阅文件和 verge.yaml 互相覆盖。可行的做法是用软链接把其中一个实例的配置目录指向另一个位置。以管理员身份打开 PowerShell 执行:
New-Item -Type SymbolicLink -Path "$env:USERPROFILE\.config\clash-verge" -Target "D:\ClashConfig-Instance2"
这样两个实例分别读写不同的配置数据。注意软链接只能在同一文件系统内正常工作,目标盘如果是 exFAT 或网络驱动器可能会失效。
04. 混合端口的冲突解决
程序隔离和配置分离做完之后,两个实例可以同时启动了,但第二个实例的内核会在启动时因为端口冲突而失败。Clash Verge Rev 默认使用混合端口 7897 来接收 HTTP 和 SOCKS 代理请求,两个实例不能监听同一个端口。
端口冲突的典型报错是 core startup failed,日志中会显示 bind: address already in use。Clash Verge Rev 有一个内置的端口回退机制,当混合端口被占用时,会尝试从配置的回退范围中找一个空闲端口。但如果回退范围内所有端口也被占用,或者回退分配器本身出错,内核启动就会被彻底阻断。
手动分配端口是最稳妥的方案。打开第二个实例的“设置”,找到“混合端口”选项,把 7897 改成未被占用的数字,比如 7898 或 10809。修改后重启软件,两个实例分别监听各自的端口。
需要注意的是,修改端口后要同步更新系统代理设置和所有依赖代理的应用程序。浏览器插件(如 SwitchyOmega)如果手动配置了代理端口 7897,需要同步改到新端口,否则会出现“内核起来了但浏览器还是走旧端口”的情况。
05. 服务模式冲突的处理
TUN 模式依赖后台服务,而服务是全局注册的,两个 Clash Verge Rev 实例不能同时安装服务。如果你在实例 A 中开启了 TUN 模式并安装了服务,实例 B 再尝试安装服务时会报错。
处理策略是 只让一个实例使用 TUN 模式。日常代理主力版本保留服务模式,测试版本只用系统代理模式,不安装服务。测试版本的 TUN 模式需求可以通过“以管理员身份运行”临时满足——右键可执行文件,选择“以管理员身份运行”,程序会以管理员权限启动,TUN 模式可以正常工作,但不会注册全局服务。
如果你需要在两个版本之间切换 TUN 模式,切换前先在当前版本中卸载服务,再在目标版本中重新安装。Windows 端的服务卸载程序位于程序目录的 resources 文件夹下,名为 uninstall-service.exe,需要以管理员身份运行。macOS 和 Linux 端则通过终端命令执行卸载脚本。
从 v2.4.5 开始,macOS 和 Linux 对服务 IPC 权限做了进一步限制,要求“先在旧版本卸载 TUN 服务后再安装新版本服务”。跨版本切换 TUN 时务必遵守这个顺序,否则新服务可能因为权限残留而无法启动。
06. 验证与日常使用建议
两个实例都配置好后,用以下检查点确认共存状态正常。
端口验证。打开命令提示符,执行 netstat -ano | findstr :7897 和 netstat -ano | findstr :7898,确认两个端口分别被不同的进程监听。如果只有一个端口有监听,说明另一个实例的内核没有成功启动。
配置隔离验证。在实例 A 中导入一个新的订阅,然后打开实例 B,确认 B 的订阅列表中没有出现 A 刚刚导入的那个。如果出现了,说明两个实例共用了同一个配置目录。
服务状态验证。在系统服务列表中搜索 clash-verge-service,确认只有一个服务实例在运行,且它对应的程序路径指向你希望使用 TUN 模式的那个版本。
日常使用时,建议给两个版本的快捷方式起不同的名字,比如“Clash Verge Rev (稳定)”和“Clash Verge Rev (测试)”,避免托盘图标混淆。托盘图标本身没有区分版本的功能,两个实例的图标看起来是一样的,点击时需要根据菜单内容判断当前打开的是哪一个。
如果需要在两个实例之间迁移配置,直接把 profiles 文件夹和 verge.yaml 从源配置目录拷贝到目标配置目录即可。verge.yaml 里的端口设置需要手动确认,避免和目标实例的端口分配冲突。更多配置文件管理和备份的操作,可以参考 Merge 与 Script 指南;如果共存过程中遇到内核通信失败或订阅导入问题,常见问题页面中有针对性的排查步骤。