From 73f674c23f87591917e1937272efea17809cc59f Mon Sep 17 00:00:00 2001 From: Jaredl-Dev <260281143+Jaredl-Dev@users.noreply.github.com> Date: Fri, 14 Aug 2026 13:11:22 -0700 Subject: [PATCH 1/2] - Forward launch arguments losslessly --- Launcher/Pages/LauncherPage.xaml.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Launcher/Pages/LauncherPage.xaml.cs b/Launcher/Pages/LauncherPage.xaml.cs index 16e83b8..cd09180 100644 --- a/Launcher/Pages/LauncherPage.xaml.cs +++ b/Launcher/Pages/LauncherPage.xaml.cs @@ -329,8 +329,6 @@ private async void BtnPlay_Click(object sender, RoutedEventArgs e) if (LaunchOptions.Windowed && !hasXRes) { argParts.Add("-xres"); argParts.Add(LaunchOptions.WindowedWidth.ToString()); } if (LaunchOptions.Windowed && !hasYRes) { argParts.Add("-yres"); argParts.Add(LaunchOptions.WindowedHeight.ToString()); } - string arguments = string.Join(" ", argParts); - bool isEasyAntiCheat = false; try { @@ -356,7 +354,11 @@ private async void BtnPlay_Click(object sender, RoutedEventArgs e) else exe = isEasyAntiCheat ? "EAC_LaunchGeneralsOnline.exe" : "GeneralsOnlineZH_60.exe"; - var startedProcess = Process.Start(exe, arguments); + var startInfo = new ProcessStartInfo(exe); + foreach (string argument in argParts) + startInfo.ArgumentList.Add(argument); + + var startedProcess = Process.Start(startInfo); // Hide the launcher while the game runs, then exit once the game closes. Application.Current.MainWindow?.Hide(); From 08b2679d987f30f238ac41995aba0ad787b2a815 Mon Sep 17 00:00:00 2001 From: Jaredl-Dev <260281143+Jaredl-Dev@users.noreply.github.com> Date: Fri, 14 Aug 2026 13:24:31 -0700 Subject: [PATCH 2/2] - Add fullscreen launch argument override --- Launcher/Pages/LauncherPage.xaml.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Launcher/Pages/LauncherPage.xaml.cs b/Launcher/Pages/LauncherPage.xaml.cs index cd09180..e7b6aac 100644 --- a/Launcher/Pages/LauncherPage.xaml.cs +++ b/Launcher/Pages/LauncherPage.xaml.cs @@ -322,10 +322,14 @@ private async void BtnPlay_Click(object sender, RoutedEventArgs e) bool hasWin = incoming.Any(a => a.Equals("-win", StringComparison.OrdinalIgnoreCase)); bool hasXRes = incoming.Any(a => a.Equals("-xres", StringComparison.OrdinalIgnoreCase)); bool hasYRes = incoming.Any(a => a.Equals("-yres", StringComparison.OrdinalIgnoreCase)); + bool fullscreenOverride = incoming.Any(a => a.Equals("-fullscreen", StringComparison.OrdinalIgnoreCase)); - var argParts = incoming.ToList(); + var argParts = incoming + .Where(a => !a.Equals("-fullscreen", StringComparison.OrdinalIgnoreCase) + && (!fullscreenOverride || !a.Equals("-win", StringComparison.OrdinalIgnoreCase))) + .ToList(); - if (LaunchOptions.Windowed && !hasWin) argParts.Add("-win"); + if (LaunchOptions.Windowed && !fullscreenOverride && !hasWin) argParts.Add("-win"); if (LaunchOptions.Windowed && !hasXRes) { argParts.Add("-xres"); argParts.Add(LaunchOptions.WindowedWidth.ToString()); } if (LaunchOptions.Windowed && !hasYRes) { argParts.Add("-yres"); argParts.Add(LaunchOptions.WindowedHeight.ToString()); }