Skip to content

v0.4.11

Latest

Choose a tag to compare

@corvofiox corvofiox released this 26 Oct 05:27
· 1 commit to main since this release

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 失败。