diff --git a/installer/HermesHubSetup.cs b/installer/HermesHubSetup.cs index bafc630..80b101f 100644 --- a/installer/HermesHubSetup.cs +++ b/installer/HermesHubSetup.cs @@ -18,7 +18,7 @@ namespace HermesHubSetup // Подставляется сборщиком из фактического git-коммита. Раньше здесь // жил зашитый "8cddc9f", то есть манифест сообщал неправду о том, из // какого кода собран установщик. - public const string BuildCommit = "57e7ca2"; + public const string BuildCommit = "ef6a9e1"; public const string MIN_HERMES_VERSION = "0.20.0"; public const string MAX_TESTED_HERMES = "0.20.4"; @@ -993,7 +993,7 @@ namespace HermesHubSetup lblDone.Height = 140; chkLaunchNow = new CheckBox(); - chkLaunchNow.Text = "Запустить Hermes Hub сейчас"; + chkLaunchNow.Text = "Запустить веб-интерфейс Hermes Hub сейчас"; chkLaunchNow.Checked = true; chkLaunchNow.Location = new Point(0, 150); chkLaunchNow.AutoSize = true; @@ -1030,10 +1030,19 @@ namespace HermesHubSetup { if (chkLaunchNow != null && chkLaunchNow.Checked) { - string exe = Path.Combine(SetupEngine.TargetInstallDir, "HermesHub.exe"); - if (File.Exists(exe)) + // Запускаем ВЕБ-интерфейс, а не десктоп. Владелец после + // установки получал десктопное окно и принимал его за старую + // версию: внешне оно и правда другое. Веб — то, ради чего + // ставили; десктоп остаётся доступен своим ярлыком. + string webExe = Path.Combine(SetupEngine.TargetInstallDir, "HermesHubWeb.exe"); + string desktopExe = Path.Combine(SetupEngine.TargetInstallDir, "HermesHub.exe"); + if (File.Exists(webExe)) { - Process.Start(exe); + Process.Start(webExe); + } + else if (File.Exists(desktopExe)) + { + Process.Start(desktopExe); } } this.Close(); diff --git a/launcher/HermesHub.exe b/launcher/HermesHub.exe index 22fae0c..a5aa2fb 100644 Binary files a/launcher/HermesHub.exe and b/launcher/HermesHub.exe differ diff --git a/launcher/HermesHubWeb.cs b/launcher/HermesHubWeb.cs index d633e42..87164bf 100644 --- a/launcher/HermesHubWeb.cs +++ b/launcher/HermesHubWeb.cs @@ -178,17 +178,28 @@ namespace HermesHub // 4. Locate browser in strict priority: Edge -> Chrome -> Chromium registry -> Fallback string browserPath = FindChromiumBrowser(); Process browserProc = null; + DateTime browserStartedAt = DateTime.UtcNow; if (!string.IsNullOrEmpty(browserPath)) { ProcessStartInfo browserPsi = new ProcessStartInfo(); browserPsi.FileName = browserPath; - browserPsi.Arguments = string.Format("--app=\"{0}\" --window-size=1400,900", targetUrl); + // Отдельный профиль браузера обязателен. Без него запущенный + // msedge.exe передаёт задачу УЖЕ РАБОТАЮЩЕМУ экземпляру и тут же + // завершается: WaitForExit возвращается мгновенно, лаунчер + // считает окно закрытым и убивает сервер, пока страница ещё + // грузится. Владелец видел ERR_CONNECTION_REFUSED. + string browserProfile = Path.Combine(hermesHome, "web_browser_profile"); + try { Directory.CreateDirectory(browserProfile); } catch { } + browserPsi.Arguments = string.Format( + "--app=\"{0}\" --window-size=1400,900 --user-data-dir=\"{1}\" --no-first-run --no-default-browser-check", + targetUrl, browserProfile); browserPsi.UseShellExecute = false; try { browserProc = Process.Start(browserPsi); + browserStartedAt = DateTime.UtcNow; } catch (Exception ex) { @@ -226,6 +237,14 @@ namespace HermesHub } catch { } + // Подстраховка: если процесс браузера завершился почти сразу, + // это почти наверняка передача окна другому экземпляру, а не + // закрытие пользователем. Убивать сервер в этом случае нельзя. + if (DateTime.UtcNow - browserStartedAt < TimeSpan.FromSeconds(5)) + { + return; + } + try { if (!serverProcess.HasExited) diff --git a/launcher/HermesHubWeb.exe b/launcher/HermesHubWeb.exe index 527ab8b..04036e9 100644 Binary files a/launcher/HermesHubWeb.exe and b/launcher/HermesHubWeb.exe differ diff --git a/launcher/hermes-hub-web.sh b/launcher/hermes-hub-web.sh index 7f25fab..9c6cbcf 100644 --- a/launcher/hermes-hub-web.sh +++ b/launcher/hermes-hub-web.sh @@ -121,7 +121,13 @@ done if [ -n "$CHROMIUM_BIN" ]; then # Launch in Application Window mode without address bar, tabs, or menus - "$CHROMIUM_BIN" --app="$TARGET_URL" --window-size=1400,900 "$@" + # Отдельный профиль: иначе запущенный браузер передаёт окно уже + # работающему экземпляру и сразу завершается — ожидание его закрытия + # срабатывает мгновенно. На Windows это приводило к тому, что сервер + # убивали, пока страница ещё грузилась. + BROWSER_PROFILE="$HERMES_HOME/web_browser_profile" + mkdir -p "$BROWSER_PROFILE" + "$CHROMIUM_BIN" --app="$TARGET_URL" --window-size=1400,900 --user-data-dir="$BROWSER_PROFILE" --no-first-run --no-default-browser-check "$@" else # Fallback to standard default browser echo "Запуск в обычном браузере: режим приложения (без адресной строки) требует Google Chrome, Chromium или Microsoft Edge."