From e70a9dd0c901e36eef1a95c388b657fb3855e796 Mon Sep 17 00:00:00 2001 From: nessi Date: Wed, 18 Mar 2026 08:12:34 +0100 Subject: [PATCH] feat: suppress console window for tunnel helper commands on Windows Add CREATE_NO_WINDOW flag to all tunnel helper Command invocations on Windows to prevent console window flashing during connect, disconnect, and metrics operations. Import CommandExt trait and define CREATE_NO_WINDOW constant for Windows builds. --- .../src-tauri/src/tunnel_manager.rs | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/desktop-client/src-tauri/src/tunnel_manager.rs b/desktop-client/src-tauri/src/tunnel_manager.rs index 2fe798b..8dde6af 100644 --- a/desktop-client/src-tauri/src/tunnel_manager.rs +++ b/desktop-client/src-tauri/src/tunnel_manager.rs @@ -6,6 +6,12 @@ use std::{ use serde::{Deserialize, Serialize}; use tauri::{AppHandle, Manager}; +#[cfg(target_os = "windows")] +use std::os::windows::process::CommandExt; + +#[cfg(target_os = "windows")] +const CREATE_NO_WINDOW: u32 = 0x08000000; + pub fn current_tunnel_strategy() -> &'static str { if cfg!(target_os = "windows") { "embedded-wireguard-windows-x64" @@ -18,10 +24,11 @@ pub fn current_tunnel_strategy() -> &'static str { pub fn connect(app: &AppHandle, profile_path: &Path) -> Result<(), String> { let backend = bundled_backend(app)?; - let output = Command::new(backend) - .arg("connect") - .arg("--profile") - .arg(profile_path) + let mut command = Command::new(backend); + command.arg("connect").arg("--profile").arg(profile_path); + #[cfg(target_os = "windows")] + command.creation_flags(CREATE_NO_WINDOW); + let output = command .output() .map_err(|err| format!("Unable to start embedded tunnel backend: {}", err))?; @@ -34,10 +41,11 @@ pub fn connect(app: &AppHandle, profile_path: &Path) -> Result<(), String> { pub fn disconnect(app: &AppHandle, profile_path: &Path) -> Result<(), String> { let backend = bundled_backend(app)?; - let output = Command::new(backend) - .arg("disconnect") - .arg("--profile") - .arg(profile_path) + let mut command = Command::new(backend); + command.arg("disconnect").arg("--profile").arg(profile_path); + #[cfg(target_os = "windows")] + command.creation_flags(CREATE_NO_WINDOW); + let output = command .output() .map_err(|err| format!("Unable to stop embedded tunnel backend: {}", err))?; @@ -54,10 +62,11 @@ pub fn is_active(app: &AppHandle, profile_path: &Path) -> Result { pub fn metrics(app: &AppHandle, profile_path: &Path) -> Result { let backend = bundled_backend(app)?; - let output = Command::new(backend) - .arg("metrics") - .arg("--profile") - .arg(profile_path) + let mut command = Command::new(backend); + command.arg("metrics").arg("--profile").arg(profile_path); + #[cfg(target_os = "windows")] + command.creation_flags(CREATE_NO_WINDOW); + let output = command .output() .map_err(|err| format!("Unable to query embedded tunnel backend: {}", err))?;