diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs index 577036f91683e94f14e642c7e566e5ba60c0d35d..4cd15e7923ca43355996564e3e338abf63b5cb71 100644 --- a/src-tauri/src/cmds.rs +++ b/src-tauri/src/cmds.rs @@ -5,7 +5,7 @@ use crate::{ }; use serde_yaml::Mapping; use std::process::Command; -use tauri::State; +use tauri::{api, State}; /// get all profiles from `profiles.yaml` /// do not acquire the lock of ProfileLock @@ -273,6 +273,12 @@ pub async fn patch_verge_config( verge.patch_config(payload) } +/// kill all sidecars when update app +#[tauri::command] +pub fn kill_sidecars() { + api::process::kill_children(); +} + /// open app config dir #[tauri::command] pub fn open_app_dir() -> Result<(), String> { diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 31dcdc8aa8aa73cda3f071c328da783cd026d637..e577ab98920e6133e5250bce97e3858cf71b0955 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -74,6 +74,7 @@ fn main() -> std::io::Result<()> { cmds::restart_sidecar, cmds::get_sys_proxy, cmds::get_cur_proxy, + cmds::kill_sidecars, cmds::open_app_dir, cmds::open_logs_dir, // clash diff --git a/src/components/layout/update-dialog.tsx b/src/components/layout/update-dialog.tsx index 188114855c4920170a1f5dc91b9233a5d974aba0..3111982b825b09143c36fb0cfe923f14df081831 100644 --- a/src/components/layout/update-dialog.tsx +++ b/src/components/layout/update-dialog.tsx @@ -10,6 +10,7 @@ import { DialogContentText, DialogTitle, } from "@mui/material"; +import { killSidecars } from "../../services/cmds"; interface Props { open: boolean; @@ -31,6 +32,7 @@ const UpdateDialog = (props: Props) => { try { setUploading(true); uploadingState = true; + await killSidecars(); await installUpdate(); await relaunch(); } catch (error) { diff --git a/src/services/cmds.ts b/src/services/cmds.ts index 9ef9c131fef51eff7801349fcfb373c716ef5bd3..b8d9d4ad8cac857b9868b4ec303a6d16f42dc01b 100644 --- a/src/services/cmds.ts +++ b/src/services/cmds.ts @@ -64,6 +64,10 @@ export async function getSystemProxy() { return invoke<any>("get_sys_proxy"); } +export async function killSidecars() { + return invoke<any>("kill_sidecars"); +} + export async function openAppDir() { return invoke<void>("open_app_dir"); }