From bd3420e4edb207a6ee0f4d20a02ce7881802ce87 Mon Sep 17 00:00:00 2001 From: zqm Date: Tue, 7 Apr 2026 11:10:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8D=E5=85=81=E8=AE=B8=E9=87=8D=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/BootLoader/src/main.rs | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/Windows/CS/Framework4.0/BootLoader/src/main.rs b/Windows/CS/Framework4.0/BootLoader/src/main.rs index e513d36..7b019f7 100644 --- a/Windows/CS/Framework4.0/BootLoader/src/main.rs +++ b/Windows/CS/Framework4.0/BootLoader/src/main.rs @@ -18,6 +18,11 @@ fn main() { // 隐藏控制台窗口 hide_console(); + // 检查是否已有 BootLoader 进程在运行 + if is_process_running("BootLoader.exe") { + return; + } + // 获取 BootLoader 启动目录所在盘的 AppData 目录 let appdata_dir = get_appdata_dir(); @@ -25,14 +30,16 @@ fn main() { let updater_exe = appdata_dir.join("Updater.exe"); let updater_new_exe = appdata_dir.join("Updater.new.exe"); + // 检查 Updater.new.exe 是否存在 + if !updater_new_exe.exists() { + return; + } + // 等待 Updater 进程退出 wait_for_process_exit("Updater.exe"); - // 检查 Updater.new.exe 是否存在 - if updater_new_exe.exists() { - // 直接覆盖 Updater.exe(fs::rename 在 Windows 上会自动替换已存在的文件) - fs::rename(&updater_new_exe, &updater_exe).expect("Failed to rename Updater.new.exe to Updater.exe"); - } + // 直接覆盖 Updater.exe(fs::rename 在 Windows 上会自动替换已存在的文件) + fs::rename(&updater_new_exe, &updater_exe).expect("Failed to rename Updater.new.exe to Updater.exe"); // 启动 Updater.exe Command::new(updater_exe) @@ -40,6 +47,16 @@ fn main() { .expect("Failed to start Updater.exe"); } +fn is_process_running(process_name: &str) -> bool { + let output = Command::new("tasklist") + .args(["/FI", &format!("IMAGENAME eq {}", process_name)]) + .output() + .expect("Failed to execute tasklist"); + + let output_str = String::from_utf8_lossy(&output.stdout); + output_str.contains(process_name) +} + fn get_appdata_dir() -> std::path::PathBuf { let exe_path = std::env::current_exe().expect("Failed to get executable path"); let drive = if let Some(parent) = exe_path.parent() {