diff --git a/src/AcDream.Launcher.Core/Orchestration/LauncherExecutableSet.cs b/src/AcDream.Launcher.Core/Orchestration/LauncherExecutableSet.cs index 4add2816..8014ff20 100644 --- a/src/AcDream.Launcher.Core/Orchestration/LauncherExecutableSet.cs +++ b/src/AcDream.Launcher.Core/Orchestration/LauncherExecutableSet.cs @@ -100,7 +100,14 @@ public sealed class LauncherExecutableSet return mode == LaunchMode.Headless ? new LauncherProcessSpec( paths.HeadlessHostPath, - ["--config", configFilePath], + // "run" is REQUIRED and positional: HeadlessCommandLine.Parse + // reads arguments[0] as the command and accepts only + // "validate" or "run". Passing "--config" first made every + // launcher-started headless session die instantly with + // "Invalid command. Run --help for usage." (exit 64) — the + // graphical host takes a bare "--session-config", and this + // sibling call was written to match it. + ["run", "--config", configFilePath], paths.WorkingDirectory, StderrLogPath: stderrLogPath) : new LauncherProcessSpec( @@ -119,7 +126,11 @@ public sealed class LauncherExecutableSet ExecutablePaths paths = RequireAvailable(LaunchMode.Headless); return new LauncherProcessSpec( paths.HeadlessHostPath, - ["--config", configFilePath], + // Same grammar as CreatePlaySpec's headless arm — see its comment. + // A probe is an ordinary "run" whose session config carries + // mode: "probe"; the difference is in the document, not the + // command line. + ["run", "--config", configFilePath], paths.WorkingDirectory, StderrLogPath: stderrLogPath); } diff --git a/src/AcDream.Launcher/MainWindow.axaml b/src/AcDream.Launcher/MainWindow.axaml index bb638338..ab945311 100644 --- a/src/AcDream.Launcher/MainWindow.axaml +++ b/src/AcDream.Launcher/MainWindow.axaml @@ -193,20 +193,18 @@ - +