Repository navigation
Com Bridge v0.4.11
修两个开机自启相关的问题,都是我之前留的坑。
1. 开机自启会弹出 GUI(没有后台静默)
程序有两条自启路径:
| 路径 | 注册的动作 | 是否静默 |
|---|---|---|
| 普通自启(HKCU...\Run) | ... exe" --autostart |
✅ 一直是对的 |
| 管理员自启(登录计划任务) | exe gui |
❌ 漏了 --autostart |
计划任务这条只注册了 gui 子命令,所以任务拉起时程序走"正常启动"分支,
登录后就把窗口怼到面前。现在两条都带静默标志。
配套修好两个连带问题:
- 工作组机器注册任务直接失败:
USERDOMAIN在工作组机器上是WORKGROUP,
拿它拼计划任务主体会报HRESULT 0x80070534(账户名与安全标识间无任何映射)。
现在域为WORKGROUP/空时退回计算机名(CORVO-LAPTOP\gaoxi)。 - 已注册的旧任务不会自己变:启动时后台自检一次,若发现任务动作缺静默标志
—— 本进程已是管理员(说明正是被该任务拉起)就就地重注册,不需要再弹 UAC;
否则在日志里提示"重新点一次「开机自启(管理员)」即可升级"。
2. 开机握手太慢(不是每 5 秒一次)
你记的没错,规格就是每 5 秒。旧实现是 1→2→4→5 的指数退避,写着
"上限 5s"——但连接尝试本身还会阻塞(ControlClient 默认 5s 超时),
两者叠加,实测间隔是 6.5~9.5 秒:
修复前(副机日志): 第 1 次探测 已等 5s → 第 3 次探测 已等 18s (13s / 2 次)
修复后(副机日志): 第 1 次探测 已等 1s → 第 3 次探测 已等 11s (10s / 2 次 = 5.0s/次)
第 3 次 已等 11s → 第 5 次 已等 21s
第 5 次 已等 21s → 第 7 次 已等 31s
改法:
- 节拍从本次探测发起时刻算(
Agent.retry_delay),固定 5s 一格; - 探测用 1s 短超时(握手成功后自动恢复成正常超时,不影响后续收发);
- 广播发现阶段与运行期断线重连用同一节奏(原来重连是 2→4→5)。
可用 COM_BRIDGE_HOST_RETRY_S 覆盖间隔(默认 5)。
测试
新增 25 项(tests/test_autostart_silent_and_retry.py):计划任务参数必须含静默标志、
两条自启路径用同一个标志、_full_user 在 WORKGROUP 下退回计算机名、任务参数 XML 解析、
节拍纯函数(0→5.0s、0.3→4.7s、超时→0.2s 下限)、两条等待循环与重连都不许再出现退避。
全量 914 通过 / 1 跳过 / 0 失败。