fix(tun): avoid service IPC startup race on Windows (#6340)

* fix(tun): avoid service IPC startup race on Windows

* docs: Changelog.md

* style: prettier
This commit is contained in:
Slinetrac 2026-02-22 21:09:47 +08:00 committed by GitHub
parent 700011688b
commit 1bf445ddcc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 16 additions and 22 deletions

View File

@ -2,6 +2,8 @@
### 🐞 修复问题
- 修复 Windows 管理员身份运行时开关 TUN 模式异常
<details>
<summary><strong> ✨ 新增功能 </strong></summary>

View File

@ -42,7 +42,6 @@
</details>
## v2.4.5
- **Mihomo(Meta) 内核升级至 v1.19.19**

View File

@ -141,4 +141,4 @@
"unrs-resolver"
]
}
}
}

View File

@ -83,7 +83,7 @@ impl CoreManager {
#[cfg(target_os = "windows")]
async fn wait_for_service_if_needed(&self) {
use crate::{config::Config, constants::timing};
use crate::{config::Config, constants::timing, core::service};
use backoff::{Error as BackoffError, ExponentialBackoff};
let needs_service = Config::verge().await.latest_arc().enable_tun_mode.unwrap_or(false);
@ -108,6 +108,12 @@ impl CoreManager {
return Ok(());
}
// If the service IPC path is not ready yet, treat it as transient and retry.
// Running init/refresh too early can mark service state unavailable and break later config reloads.
if !service::is_service_ipc_path_exists() {
return Err(BackoffError::transient(anyhow::anyhow!("Service IPC not ready")));
}
manager.init().await.map_err(BackoffError::transient)?;
let _ = manager.refresh().await;

View File

@ -11,14 +11,9 @@
"icons/icon.icns",
"icons/icon.ico"
],
"resources": [
"resources"
],
"resources": ["resources"],
"publisher": "Clash Verge Rev",
"externalBin": [
"sidecar/verge-mihomo",
"sidecar/verge-mihomo-alpha"
],
"externalBin": ["sidecar/verge-mihomo", "sidecar/verge-mihomo-alpha"],
"copyright": "GNU General Public License v3.0",
"category": "DeveloperTool",
"shortDescription": "Clash Verge Rev",
@ -47,29 +42,21 @@
},
"deep-link": {
"desktop": {
"schemes": [
"clash",
"clash-verge"
]
"schemes": ["clash", "clash-verge"]
}
}
},
"app": {
"security": {
"capabilities": [
"desktop-capability",
"migrated"
],
"capabilities": ["desktop-capability", "migrated"],
"assetProtocol": {
"enable": true,
"scope": {
"allow": [
"**"
],
"allow": ["**"],
"requireLiteralLeadingDot": false
}
},
"csp": null
}
}
}
}