Repository navigation
v0.8.1 · 托盘点了没反应(已修)· 安装服务 ≠ 启用服务
双击托盘图标打不开界面(修好了)· 安装服务 ≠ 启用服务 · 顶栏流量图
v0.8.0 → v0.8.1,主要是一个会让人以为程序坏了的 bug,外加一处服务形态的语义调整。
一、托盘点了没反应(本版主戏)
现象:某台机器重启过几次之后,双击托盘图标、点「显示界面」一点动静都没有,
日志里也不留一个字。引擎照跑、内网照通,就是界面出不来。
根因是三个坑叠在一起:
- 孤儿界面:引擎被外部强杀(任务管理器 / 计划任务重启 / 崩溃)时,界面进程不会跟着死,
它活下来、还占着「同一时间只跑一个界面」的那把锁。 - 新界面一启动就"让位":之后引擎每次拉起的界面都发现锁被占着,就把唤醒消息丢给那个孤儿、
自己 30 毫秒后退出(退出码 0)。 - 看护把它当成"用户主动退出":于是看护循环永久收工 —— 从此这台机器再也没有界面,
直到有人手工杀进程。现场那台孤儿活了三天,期间每次重启引擎都是白重启。
修法:
- 界面进程带
-parent <引擎pid>起来,宿主没了 2 秒内自己退出(不再产生孤儿占锁); - 看护遇到退出码 0 改为待命(点托盘会再拉一次),而不是收工;
- 托盘点了先请「已经接上的那个界面」把窗口露出来,叫不动才重新拉起 ——
以前是按"我有没有亲手拉起过进程"判断,等于把活着的那一个当空气。
验证:local/tray-fix.ps1(换 exe + 重启 + 端到端):点 X 收进托盘 → 点托盘能叫回来 →
强杀引擎后界面自己退出 → 再起界面正常,全过。
二、安装服务 ≠ 启用服务
以前 -service-install 装完就是"每次开机自动跑" —— 于是装来备用的服务会悄悄抢走引擎,
登录后起来的界面只能当只读失败者(没托盘、没通知、刷权限报错)。
现在跟「装虚拟网卡」和「开 TUN」分开一个道理:
nethub.exe -service-install:只注册(手动启动),不自己跑、不随开机;- 界面「设置 → headless 模式」新增开关「开机自启用服务形态」:
拨开 = 设为开机自启 + 顺手关掉界面版那条计划任务自启(两个都开必然抢引擎)+ 当场交棒;
拨关 = 取消开机自启(注册保留)+ 停服务 + 把引擎接回界面版; - 命令行对应
nethub.exe -service-autostart on|off,-service-state/-status里能看到
autoStart; - 重新部署(换路径/参数)不会冲掉你已经拨好的自启开关。
三、顶栏流量图
- 曲线外面加了一层圆角淡底框,跟状态胶囊、按钮同一套视觉(以前是直接铺在白底上的一块色板);
- 折线改成过中点的轻平滑(不移动任何采样点,只是把 4px 一个的折角磨圆);
- 右端加了一个当前值小圆点,告诉你曲线"现在"落在哪;贴到最低/最高也不会被裁半边了。
四、顺手
- README 的界面截图重拍(旧的被误删过)。
- 「开机自启用服务形态」那行解释文案去掉(说明放进了卡片右上角的「i」)。
安装 / 升级
- 包:
NetHub.zip(不含任何配置与日志;把config.yaml.example复制成config.yaml填自己的上游) - 已经在用的:直接覆盖
nethub.exe(config.yaml保留),或用「设置 → 关于 → 一键更新」。 - 回滚:
nethub.exe -rollback(旧程序保留为nethub.exe.old)。
如果你这台机器上"两种形态都装着":本版之后"装着"是无害的,冲突的只是两条自启。
桌面机 → 界面里关掉「开机自启用服务形态」(服务注册留着备用),GUI 那条计划任务自启开着;
服务器 → 打开「开机自启用服务形态」,界面里关掉计划任务自启。
已知边界
- UDP(QUIC 那一类)仍然只拦下不中继;只能 Windows x64;IPv6 主动不做。
- GUI / 计划任务形态被点名杀进程后没有自动恢复能力(系统层面不支持);
无人值守请用服务形态(它由 SCM 负责拉起,带熔断)。