diff --git a/apps/worker/src/worker.ts b/apps/worker/src/worker.ts index cad8c9c..cb803eb 100644 --- a/apps/worker/src/worker.ts +++ b/apps/worker/src/worker.ts @@ -107,5 +107,7 @@ if (!workerPort && process.argv.includes("--dada-ai-probe")) { } catch { storageStatus = "unavailable"; control.reportStatus("storage_unavailable"); + clearInterval(keepAlive); + setTimeout(() => process.exit(1), 50); } } diff --git a/supervisor/Dada.Supervisor/Program.cs b/supervisor/Dada.Supervisor/Program.cs index 4fe6487..ed52834 100644 --- a/supervisor/Dada.Supervisor/Program.cs +++ b/supervisor/Dada.Supervisor/Program.cs @@ -30,7 +30,10 @@ internal static class Program }; var state = await runtime.StartAsync(); if (!form.IsDisposed) form.SetState(state); - if (state == SupervisorState.Ready) SupervisorForm.OpenProductInSupportedBrowser(); + if (state == SupervisorState.Ready && !SupervisorForm.OpenProductInSupportedBrowser()) + { + form.SetBrowserLaunchFailure(); + } } form.Shown += async (_, _) => await StartRuntimeAsync(); form.RestartRequested += async () => await StartRuntimeAsync(); diff --git a/supervisor/Dada.Supervisor/SupervisorForm.cs b/supervisor/Dada.Supervisor/SupervisorForm.cs index bac43fd..0df46a8 100644 --- a/supervisor/Dada.Supervisor/SupervisorForm.cs +++ b/supervisor/Dada.Supervisor/SupervisorForm.cs @@ -26,6 +26,7 @@ internal sealed class SupervisorForm : Form Font = new Font("Segoe UI", 9F); FormBorderStyle = FormBorderStyle.FixedDialog; MaximizeBox = false; + ShowInTaskbar = true; StartPosition = FormStartPosition.CenterScreen; Text = "Dada"; @@ -90,10 +91,6 @@ internal sealed class SupervisorForm : Form trayIcon.DoubleClick += (_, _) => RestoreWindow(); FormClosing += (_, _) => trayIcon.Visible = false; - Resize += (_, _) => - { - if (WindowState == FormWindowState.Minimized) Hide(); - }; SetState(initialState); } @@ -139,6 +136,14 @@ internal sealed class SupervisorForm : Form Activate(); } + internal void SetBrowserLaunchFailure() + { + if (state == SupervisorState.Ready) + { + statusDetail.Text = "本机服务运行正常,但未能自动打开浏览器;请点击“打开 Dada”或选择浏览器。"; + } + } + protected override void Dispose(bool disposing) { if (disposing) trayIcon.Dispose(); diff --git a/supervisor/Dada.Supervisor/SupportedBrowserLauncher.cs b/supervisor/Dada.Supervisor/SupportedBrowserLauncher.cs index dbf1c68..ab81fe9 100644 --- a/supervisor/Dada.Supervisor/SupportedBrowserLauncher.cs +++ b/supervisor/Dada.Supervisor/SupportedBrowserLauncher.cs @@ -1,3 +1,4 @@ +using System.ComponentModel; using System.Diagnostics; using Microsoft.Win32; @@ -13,10 +14,20 @@ internal static class SupportedBrowserLauncher { var executable = FindExecutable(executableName); if (executable is null) return false; - var startInfo = new ProcessStartInfo(executable) { UseShellExecute = false }; - startInfo.ArgumentList.Add(uri.AbsoluteUri); - Process.Start(startInfo); - return true; + try + { + var startInfo = new ProcessStartInfo(executable) { UseShellExecute = false }; + startInfo.ArgumentList.Add(uri.AbsoluteUri); + return Process.Start(startInfo) is not null; + } + catch (Win32Exception) + { + return false; + } + catch (InvalidOperationException) + { + return false; + } } private static string? FindExecutable(string executableName)