const DETACHED_PROCESS: u32 = 0x0000_0008;
const CREATE_NEW_PROCESS_GROUP: u32 = 0x0000_0200;
pub fn daemonize(args: &[String]) -> Result<(), Box<dyn std::error::Error>> {
use std::os::windows::process::CommandExt;
let exe = std::env::current_exe()?;
let mut cmd = std::process::Command::new(&exe);
cmd.args(args);
cmd.arg("--daemon-internal");
cmd.creation_flags(DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP);
cmd.stdin(std::process::Stdio::null());
cmd.stdout(std::process::Stdio::null());
cmd.stderr(std::process::Stdio::null());
cmd.spawn()
.map_err(|e| format!("failed to spawn detached daemon: {e}").to_string())?;
std::process::exit(0);
}