From fe7c8d28344b6529e85af3f78afc3178a7848e06 Mon Sep 17 00:00:00 2001 From: mxve <68632137+mxve@users.noreply.github.com> Date: Mon, 6 Nov 2023 03:20:46 +0100 Subject: [PATCH] self restart --- src/main.rs | 3 ++- src/self_update.rs | 27 ++++++++++++++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4fd5ea5..07afa0b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -376,6 +376,7 @@ async fn main() { setup_env(); let mut args: Vec = env::args().collect(); + let original_args = args.clone(); if arg_bool(&args, "--help") { println!("CLI Args:"); @@ -428,7 +429,7 @@ async fn main() { let mut cfg = config::load(install_path.join("alterware-launcher.json")); if !arg_bool(&args, "--skip-launcher-update") && !cfg.skip_self_update { - self_update::run(cfg.update_only); + self_update::run(cfg.update_only, original_args); } else { arg_remove(&mut args, "--skip-launcher-update"); } diff --git a/src/self_update.rs b/src/self_update.rs index a8e667f..e7eb854 100644 --- a/src/self_update.rs +++ b/src/self_update.rs @@ -13,7 +13,7 @@ pub fn self_update_available() -> bool { } #[cfg(not(windows))] -pub fn run(_update_only: bool) { +pub fn run(_update_only: bool, _args: Vec) { if self_update_available() { println!("A new version of the AlterWare launcher is available."); println!( @@ -26,7 +26,20 @@ pub fn run(_update_only: bool) { } #[cfg(windows)] -pub fn run(update_only: bool) { +pub fn restart(args: Vec) -> std::io::Error { + use std::os::windows::process::CommandExt; + match std::process::Command::new(std::env::current_exe().unwrap()) + .args(args.into_iter().skip(1)) + .creation_flags(0x00000010) // CREATE_NEW_CONSOLE + .spawn() + { + Ok(_) => std::process::exit(0), + Err(err) => err, + } +} + +#[cfg(windows)] +pub fn run(update_only: bool, args: Vec) { use std::{fs, path::PathBuf}; use crate::http; @@ -85,12 +98,12 @@ pub fn run(update_only: bool) { self_replace::self_replace("alterware-launcher-update.exe").unwrap(); fs::remove_file(&file_path).unwrap(); - println!( - "Launcher updated. View the changelog at https://github.com/{}/{}/releases/latest", - GH_OWNER, GH_REPO, - ); - println!("Please restart the launcher."); + + // restarting spawns a new console, automation should manually restart on exit code 201 if !update_only { + let restart_error = restart(args).to_string(); + println!("Failed to restart launcher: {}", restart_error); + println!("Please restart the launcher manually."); misc::stdin(); } std::process::exit(201);