diff --git a/assets/scripts/start_beat_saber_admin.exe b/assets/scripts/start_beat_saber_admin.exe index 672a78e8..c898e9d3 100644 Binary files a/assets/scripts/start_beat_saber_admin.exe and b/assets/scripts/start_beat_saber_admin.exe differ diff --git a/externals/bs-admin-start/src/main.rs b/externals/bs-admin-start/src/main.rs index 18b1dbb5..5964e94f 100644 --- a/externals/bs-admin-start/src/main.rs +++ b/externals/bs-admin-start/src/main.rs @@ -1,13 +1,43 @@ use std::{process::Command, path::Path}; +const EXECUTABLE_NAME: &str = "Beat Saber.exe"; +const AUTORIZED_ARGS: [&str; 8] = [ + "fpfc", + "-vrmode", + "oculus", + "--verbose", + "--no-yeet", + "--disable-autoupdate", + "--combine-logs", + "editor" +]; + fn main() { let args: Vec = std::env::args().collect(); - let mut command = Command::new(args.get(1).unwrap()); - command.current_dir(Path::new(args.get(1).unwrap()).parent().unwrap()); + let executable_path = Path::new(&args[1]); - for arg in args.iter().skip(1) { + if executable_path.file_name().unwrap() != EXECUTABLE_NAME { + eprintln!("Executable path is not Beat Saber.exe."); + return; + } + + if !executable_path.exists() || !executable_path.is_file() { + eprintln!("Executable path is not valid."); + return; + } + + let mut command = Command::new(executable_path); + + if let Some(parent_dir) = executable_path.parent() { + command.current_dir(parent_dir); + } + + for arg in args.iter().skip(2) { + if !AUTORIZED_ARGS.contains(&arg.as_str()) { + continue; + } command.arg(arg); }