# macOS App 与后台服务 同一个 App 支持两种角色。客户端模式只连接服务器并提供已授权的设备操作,无需本机 Hermes;服务器模式管理下表中的后台服务。切到客户端会关闭 App 的本机操作通道、停止其子进程并断开本机服务连接;独立后台服务继续遵循原生命周期,可通过停止后台服务菜单关闭。首次选择默认是客户端。 登录后可在「我的设置 → 运行模式」查看当前角色和服务器地址,选择「客户端模式」或「服务器模式」并切换,也可通过「更换服务器」重新登录其他服务器。此入口向桌面 App 的所有账号开放,管理的是当前电脑,不依赖远程账号的管理员权限;普通浏览器不显示本机运行模式控制。原生菜单栏另有常驻的「运行模式」菜单。切换成功后记住选择,账号与聊天数据保留在各自服务器。 | 操作 | 结果 | | --- | --- | | 关闭窗口 | 隐藏窗口,App 与后台继续运行 | | ⌘Q / 退出夭夭(后台继续运行) | 一次退出 App,独立 Web、本机托管 Runner 与虚拟机继续按原生命周期运行 | | 停止后台服务并退出 | 停止本应用管理的后台服务、任务与虚拟机,再退出 App;保留工作文件和配置 | 重新打开 App 会核对已有后台的身份和健康状态;后台运行时连接现有实例,已停止时重新启动。退出期间不切回启动页,也不接受重复打开/退出请求。应用菜单可查看“后台服务运行中”。只有确认服务停止才显示“后台服务已停止”;断开连接单独表示为“App 已断开后台连接”。 普通退出仍会停止由 App 自身启动的高级外部 Runner;“本地虚拟机”使用的托管 Runner 在独立 Web 内运行,不受普通退出影响。服务停止只针对已核对数据目录、端口、进程和 LaunchAgent 的本机实例,不停止用户另外启动的 Hermes、Docker 或其他服务。 停止操作使用与升级相同的互斥保护,更新进行中会拒绝停止。通过 `launchctl bootout` 卸载服务,避免 KeepAlive 重启;启动配置保留,下次打开 App 可重新启动。后台停止期间拒绝新应用请求,并在清理虚拟机后关闭 HTTP 长连接。 验收应分别验证原生 ⌘Q/菜单退出、窗口关闭、连续重新打开、真实后台停止及重新启动。仅调用测试框架的关闭方法不能证明一次原生退出完成。