diff --git a/packages/oneclient_common/src/lib.rs b/packages/oneclient_common/src/lib.rs index bd0372b7..71a82dd1 100644 --- a/packages/oneclient_common/src/lib.rs +++ b/packages/oneclient_common/src/lib.rs @@ -6,6 +6,7 @@ pub mod domain; pub mod os_ext; pub mod paths; pub mod patch; +pub mod process; pub mod search; pub mod version; diff --git a/packages/oneclient_common/src/process.rs b/packages/oneclient_common/src/process.rs new file mode 100644 index 00000000..6ccc5661 --- /dev/null +++ b/packages/oneclient_common/src/process.rs @@ -0,0 +1,12 @@ +pub fn no_window(command: &mut std::process::Command) { + #[cfg(windows)] + { + use std::os::windows::process::CommandExt; + + const CREATE_NO_WINDOW: u32 = 0x0800_0000; + command.creation_flags(CREATE_NO_WINDOW); + } + + #[cfg(not(windows))] + let _ = command; +} diff --git a/packages/oneclient_core/src/clusters/prepare.rs b/packages/oneclient_core/src/clusters/prepare.rs index e3f929ea..5f4e73f0 100644 --- a/packages/oneclient_core/src/clusters/prepare.rs +++ b/packages/oneclient_core/src/clusters/prepare.rs @@ -333,7 +333,8 @@ async fn run_forge_processors( .await? .ok_or_else(|| GameError::ProcessorMainClass(processor.jar.clone()))?; - let output = Command::new(&java.absolute_path) + let mut command = Command::new(&java.absolute_path); + command .arg("-cp") .arg(game::get_classpath_library(&libraries, &cp)?) .arg(&main) @@ -341,9 +342,10 @@ async fn run_forge_processors( &libraries, &processor.args, data, - )?) - .output() - .await?; + )?); + oneclient_common::process::no_window(command.as_std_mut()); + + let output = command.output().await?; if !output.status.success() { return Err(GameError::ProcessorFailed( diff --git a/packages/oneclient_core/src/game/launch.rs b/packages/oneclient_core/src/game/launch.rs index 0d42e1fd..fea190a2 100644 --- a/packages/oneclient_core/src/game/launch.rs +++ b/packages/oneclient_core/src/game/launch.rs @@ -655,6 +655,7 @@ async fn run_hook(hook: Option<&str>, cwd: &Path) { }; command.current_dir(cwd); + oneclient_common::process::no_window(command.as_std_mut()); if let Err(err) = command.status().await { tracing::warn!("hook '{hook}' failed: {err}"); } diff --git a/packages/oneclient_java/src/checker.rs b/packages/oneclient_java/src/checker.rs index f6fd7dc0..3f2829d7 100644 --- a/packages/oneclient_java/src/checker.rs +++ b/packages/oneclient_java/src/checker.rs @@ -29,6 +29,7 @@ pub async fn check_java_runtime(absolute_path: String) -> JavaResult = command