Repository navigation
Releases: TSS-Small-sunshine/StardustFlashLink
Release list
v2.1.3.0
Windows 安装程序 v2.1.3.0 "Vega"(织女星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
🏷 本版是
2.1线(Vega织女星)的多网络多账号版:同一个方案可以带自己的
账号与密码,切方案时连密码一起换 ✓;顺带修掉「状态页那张凭据卡存不了账号」的毛病 ✓。
接口、配置结构、服务名、AppId、安装路径都没动 —— 老配置与升级路径不受影响 ✓。
👤 ① 每个方案可以有自己的账号与密码(多网络多账号)
- 以前方案能记住账号与后缀,但密码只有一份(公共
password.txt)——
「宿舍用移动账号、教学楼用校园账号」这种玩法,切完方案密码还是上一个 ✗。
现在方案可以带自己的密码:password.<方案名>.txt(一行密码)✓; - 配置页新增「选中方案的账号与密码」:选好方案 → 填账号 / 运营商 / 该方案的密码 →
点「保存到选中方案」✓;想改回共用公共密码,勾上「删除该方案的专属密码」再保存 ✓; - 切方案连密码一起换:密码以前只在服务启动时读过一次 —— 就算方案带了专属密码,
切完方案服务还在用旧密码,登录一路失败却「配置看着都对」✗。现在切方案后会重载密码 ✓
(重载失败只记一条日志、不算切换失败:配置已经切好了,不该因为读不出密码再回滚 ✓); - 界面上看得见:方案下拉里带「专属密码」标记,编辑区上面写明「『宿舍』有专属密码文件
(password.宿舍.txt)」✓;没设过专属密码的方案照旧用公共password.txt✓
(老用户零迁移 ✓); - 密码仍然永不写进
config.json✓、不进诊断包 ✓、界面不回显 ✓。
💾 ② 状态页那张凭据卡现在真的能存账号了(修复)
- v2.1.2.0 把「账户与登录密码」从配置页搬到了状态页,但按钮沿用的还是老实现 ——
只存密码:账号和运营商在界面上能改,点「保存」却什么都没发生(看着像存上了 ✗)。
现在按钮叫「保存账号与密码」,一次存下账号 + 运营商 + 密码 ✓; - 存的姿势也修了:账号 / 运营商走部分更新(只改这两个键),
不会再把网关 / 端口 / 间隔 / 守卫设置一起重置回默认值 ✗;改某个方案同理走合并改 ✓; - 卡上写明保存范围:账号与运营商进本机配置,密码永不写进配置文件 ✓(只进密码文件)。
🔧 ③ 其它修复
- 兜底异常处理里的日志调用换成模块自带日志:以前若 logger 没被注入,这里会先报
NameError、把真正的异常盖住 —— 客户端只看到「连接被重置」,服务端一条线索都没有 ✗; - 改的若正是当前方案,保存凭据后会自动重新应用一次 → 状态页立刻显示新账号 ✓。
🎨 v2.1.2.0:界面重做(四页信息架构 + 星尘风默认主题)
🏷 那是
2.1线的界面重做版:状态 / 配置 / 日志 / 关于四页的信息架构重新排过,
「星尘风」成为默认主题,全站字体统一到 MiSans ✓。
接口、配置结构、服务名、AppId、安装路径都没动 —— 老配置与升级路径不受影响 ✓。
🎨 四页信息架构重做(本版重点)
- 状态页:状态与「立即登录」合成一张卡;下面两条统计条 —— 日常 5 格
(网络可达性 / 当前账号 / 上次登录 / 上次错误 / 下次检查)+ 诊断 4 格
(在线率 / 掉线重登 / 平均恢复耗时 / 当前延迟);右栏是「账户与登录密码」。
诊断指标不再折叠,一进页面就能看全 ✓。 - 配置页:左栏「配置方案 + 网络与服务端口」、右栏「自动化」——
升级相关整块搬去了「关于 → 更新」(配置页只留「本机怎么上网」的事)✓。 - 日志页:改成终端窗口(红黄绿灯 + 行数 / 偏移 / 体积 + 过滤 + 自动滚动),
下面是「日志占用与诊断包」✓。 - 关于页:版本 / 运行时长 → 更新(结论条 + 立即检查 / 立即升级 / 查看升级历史 +
升级流水 + 折叠的「升级设置(进阶)」)→ 数据与文件位置 → 服务与维护 ✓。
🌟 新默认主题「星尘风」+ 全站字体统一
- 右上角一键三态循环:星尘(新默认)→ 亮色 → 暗色;老主题不受影响 ✓。
- 字体统一到 MiSans(本机装了就用,没装自动退回系统字体栈 —— 不挑电脑、不缺字)✓。
🧹 界面瘦身
- 撤掉界面上那些「实现说明」:顶栏的监听 / 数据位置提示条、诊断指标的数据来源脚注、
凭据说明段;「关于」页的安装方式判据改到徽标悬停提示上(想核对时鼠标停一下就有)✓。 - 删掉「连接质量」柱图板块(4 项诊断指标已经常显在状态页)✓。
🔧 排版修复
- 长路径只在目录分隔符后换行,不再断出「…config.js / on」这种半截文件名 ✓;
- 统计条里的日期不再折成三行(最多两行:日期 / 时间)✓;
- 卡片间距统一到一套令牌,各页左右边界与行距对齐 ✓;
- 「服务与维护」的按钮改成小尺寸,窄栏里不再占两行 ✓。
⚡ v2.1.1.0:网络一变就立刻登录
- 刚连上 Wi-Fi 不用再等:以前要等到下一个检查周期(最长 60 分钟)才会登录,
现在网络一通、或换到另一个 Wi-Fi,几秒内就会自动检查并登录 ✓。 - 场景切换当场生效:走进教学楼 / 回到宿舍,配置方案(网关、间隔、账号、后缀、守卫白名单)
会立刻跟着切 ✓ —— 方案里现在可以带账号与后缀了,所以「宿舍用移动账号、
教学楼用校园账号 + 无尾缀」这类用法能真正跑起来 ✓(老方案不受影响 ✓)。
📶 配置页能直接选 Wi-Fi 名
- 「允许的 Wi-Fi 名称」下面会显示当前 Wi-Fi,并把「保存过的 / 附近可见的」名字列成
可点的按钮 —— 点一下就填进去,不用再手打 ✓(手打错一个字母就会一直不生效 ✗)。 - 「配置方案」里的「自动匹配的 Wi-Fi 名」也有一键「用当前 Wi-Fi」✓。
👤 多账号(可选)
- 想给某个方案单独用一份密码:在安装目录里放
password.<方案名>.txt(一行密码),
该方案生效时会优先用它;没有这个文件就照旧用password.txt✓。 - 密码永远只存在本机文件里 —— 不写进
config.json✓、不进诊断包 ✓、界面不回显 ✓。
🔒 安全
- 诊断包里的账号脱敏现在覆盖所有账号(含方案里存的)✓,并且不再改动运行中的配置 ✓。
🔧 修复 / 加固(相对 v2.1.0.0 之前)
🔒 安全 / 修复(相对 v2.0.14.0)
- 登录失败不再可能把密码写进日志:登录用的是 GET、密码就在网址里,某些网络错误的
文字里会带上整条网址 —— 现在日志与错误提示只保留「错误类型 / HTTP 状态码」,
网址与密码参数会被自动擦掉(<url>/***)。 - 状态页的「下次检查」时间不再跳:以前服务与调度线程各写一次、两个值来回闪;
现在只在需要时写一次。 - 卸载更省心:删除用户数据那一步补上了默认选项与超时(无人值守时不会卡住,默认保留数据)。
- 源码安装不再挑 Python 版本路径:以前写死
C:\Python314,现在自动找py启动器
或常见安装位置。 - 两个批处理脚本头部写明了已知限制:安装路径里不能含
!(cmd 的延迟展开会吃掉它)。
🔧 修复 / 加固(相对 v2.0.13.0)
- 配置导入不再怕「zip 炸弹」:以前只看上传文件大小,一个很小的 zip 能解出几十 GB;
现在导入前会先检查解压后的体积(单文件 ≤ 4 MB、合计 ≤ 8 MB),超了直接拒绝。
导入包里字段类型写错也不再报 500,而是明确告诉你哪里不对(400)。 - 账号没填也能保存其它设置:以前账号为空时整份配置都存不下去(连「自动升级」开关都改不了);
现在账号可以留空,服务会跳过登录并在状态页提示「账号未设置」(不计入退避)。 - 定时检查更结实:以前周期线程一旦遇到异常就会静默退出(之后再也不会自动登录);
现在会记一条带原因的日志、停一会儿继续跑。
🔒 加固(相对 v2.0.12.0)
- 安全响应头:页面与接口现在都带 CSP(
default-src 'none',只放宽内联脚本与样式 ——
因为页面本来就是全内联的)、X-Frame-Options: DENY(禁止被任何页面嵌框)、
X-Content-Type-Options: nosniff、Referrer-Policy: no-referrer、Permissions-Policy
(定位 / 摄像头 / 麦克风全部禁用)。 - 请求体上限:JSON 接口最多收 1 MB,超出直接回 413(以前是无条件读进来)。
拒绝时会先把已到达的字节排空再干净关连接 —— 否则 Windows 会因未读数据发 RST,
把 413 本身冲掉。 - 运行时单实例锁:手工再跑一份服务时,第二份现在什么都不做就退出(以前会先把
定时检查跑起来);升级 / 重启时对旧进程宽容,最多等 20 秒。
✨ 新增(相对 v2.0.11.0)
- 日志不再无限长大:业务日志超过 5 MB 自动轮转(保留 3 份旧档,合计 ≤ 20 MB),
升级日志超过 2 MB 轮转(保留 2 份)—— 以前只能靠你自己去删。
状态页「近 7 天」的统计会把旧档一起读,轮转不会让数字凭空变少。 - 一键诊断包(已脱敏):「关于 → 日志与诊断」里能看到各日志占用,并一键下载诊断包 ——
里面是版本 / 运行环境 / 服务状态 + 脱敏后的配置 + 各日志尾部(每个 ≤ 512 KB)。
账号打码成「前 4 位 + ******」、MAC 打码、不含任何密码;校园网内网 IP 与 Wi-Fi 名会保留
(排障需要),分享前请自行确认。反馈问题时发它,比截图 + 口述都准。
✨ 新增(相对 v2.0.10.0)
- 升级前备份整目录 + 升级失败自动回滚:以前升级前只留一个
联网_service.py的副本
(还放在%TEMP%),真要是新版本起不来,别的模块就回不去了 ✗。现在升级前会把全部代码文件
备份到安装目录的backup\<旧版本>\(每个文件都记 sha256),并且:- 执行器在两轮健康探测都探不到服务时,自动还原这些文件、重启服务、再探一次;
- Web UI「配置 → 自动升级 → 版本回滚」也能手动一键回退到某个备份版本(服务会重启,约 15 秒)。
- 回滚只动代码:
config.json、密码、配置方案都不动(备份里那份config.json只供你人工比对)。
备份保留 7 天、至少留最新 2 份;卸载时一并清掉。 - 安全兜底:备份被改坏、清单缺失、版本对不上、清单里文件名带路径分隔符 → 一律拒绝回滚
且不写任何文件(宁可不动,也不写出一套「半新半旧」的代码)。 - 顺带修掉一个陷阱:升级后的启动自检原先「找不到旧式备份就直接跳过」,换备份方案后会把
升级结果确认、AppExit 自愈、托盘自启项对齐全部跳过 ✗ —— 现在照常执行。
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.1.3.0 "Vega" |
| 文件名 | StardustFlashLink-Setup-v2.1.3.0.exe |
| 大小 | 11943884 bytes(约 11.39 MB) |
| SHA256 | bf13a399bba9c350e67b49298bd8212b27ebc85e4da6a839e8742373a151bdc4 |
| 构建提交 | f071807 |
| 构建编号 | #76 |
| 构建时间 | 2026-09-29 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2...
v2.1.2.0
Windows 安装程序 v2.1.2.0 "Vega"(织女星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
🏷 本版是
2.1线(Vega织女星)的界面重做版:状态 / 配置 / 日志 / 关于四页的
信息架构重新排过,「星尘风」成为默认主题,全站字体统一到 MiSans ✓。
接口、配置结构、服务名、AppId、安装路径都没动 —— 老配置与升级路径不受影响 ✓。
🎨 四页信息架构重做(本版重点)
- 状态页:状态与「立即登录」合成一张卡;下面两条统计条 —— 日常 5 格
(网络可达性 / 当前账号 / 上次登录 / 上次错误 / 下次检查)+ 诊断 4 格
(在线率 / 掉线重登 / 平均恢复耗时 / 当前延迟);右栏是「账户与登录密码」。
诊断指标不再折叠,一进页面就能看全 ✓。 - 配置页:左栏「配置方案 + 网络与服务端口」、右栏「自动化」——
升级相关整块搬去了「关于 → 更新」(配置页只留「本机怎么上网」的事)✓。 - 日志页:改成终端窗口(红黄绿灯 + 行数 / 偏移 / 体积 + 过滤 + 自动滚动),
下面是「日志占用与诊断包」✓。 - 关于页:版本 / 运行时长 → 更新(结论条 + 立即检查 / 立即升级 / 查看升级历史 +
升级流水 + 折叠的「升级设置(进阶)」)→ 数据与文件位置 → 服务与维护 ✓。
🌟 新默认主题「星尘风」+ 全站字体统一
- 右上角一键三态循环:星尘(新默认)→ 亮色 → 暗色;老主题不受影响 ✓。
- 字体统一到 MiSans(本机装了就用,没装自动退回系统字体栈 —— 不挑电脑、不缺字)✓。
🧹 界面瘦身
- 撤掉界面上那些「实现说明」:顶栏的监听 / 数据位置提示条、诊断指标的数据来源脚注、
凭据说明段;「关于」页的安装方式判据改到徽标悬停提示上(想核对时鼠标停一下就有)✓。 - 删掉「连接质量」柱图板块(4 项诊断指标已经常显在状态页)✓。
🔧 排版修复
- 长路径只在目录分隔符后换行,不再断出「…config.js / on」这种半截文件名 ✓;
- 统计条里的日期不再折成三行(最多两行:日期 / 时间)✓;
- 卡片间距统一到一套令牌,各页左右边界与行距对齐 ✓;
- 「服务与维护」的按钮改成小尺寸,窄栏里不再占两行 ✓。
⚡ v2.1.1.0:网络一变就立刻登录
- 刚连上 Wi-Fi 不用再等:以前要等到下一个检查周期(最长 60 分钟)才会登录,
现在网络一通、或换到另一个 Wi-Fi,几秒内就会自动检查并登录 ✓。 - 场景切换当场生效:走进教学楼 / 回到宿舍,配置方案(网关、间隔、账号、后缀、守卫白名单)
会立刻跟着切 ✓ —— 方案里现在可以带账号与后缀了,所以「宿舍用移动账号、
教学楼用校园账号 + 无尾缀」这类用法能真正跑起来 ✓(老方案不受影响 ✓)。
📶 配置页能直接选 Wi-Fi 名
- 「允许的 Wi-Fi 名称」下面会显示当前 Wi-Fi,并把「保存过的 / 附近可见的」名字列成
可点的按钮 —— 点一下就填进去,不用再手打 ✓(手打错一个字母就会一直不生效 ✗)。 - 「配置方案」里的「自动匹配的 Wi-Fi 名」也有一键「用当前 Wi-Fi」✓。
👤 多账号(可选)
- 想给某个方案单独用一份密码:在安装目录里放
password.<方案名>.txt(一行密码),
该方案生效时会优先用它;没有这个文件就照旧用password.txt✓。 - 密码永远只存在本机文件里 —— 不写进
config.json✓、不进诊断包 ✓、界面不回显 ✓。
🔒 安全
- 诊断包里的账号脱敏现在覆盖所有账号(含方案里存的)✓,并且不再改动运行中的配置 ✓。
🔧 修复 / 加固(相对 v2.1.0.0 之前)
🔒 安全 / 修复(相对 v2.0.14.0)
- 登录失败不再可能把密码写进日志:登录用的是 GET、密码就在网址里,某些网络错误的
文字里会带上整条网址 —— 现在日志与错误提示只保留「错误类型 / HTTP 状态码」,
网址与密码参数会被自动擦掉(<url>/***)。 - 状态页的「下次检查」时间不再跳:以前服务与调度线程各写一次、两个值来回闪;
现在只在需要时写一次。 - 卸载更省心:删除用户数据那一步补上了默认选项与超时(无人值守时不会卡住,默认保留数据)。
- 源码安装不再挑 Python 版本路径:以前写死
C:\Python314,现在自动找py启动器
或常见安装位置。 - 两个批处理脚本头部写明了已知限制:安装路径里不能含
!(cmd 的延迟展开会吃掉它)。
🔧 修复 / 加固(相对 v2.0.13.0)
- 配置导入不再怕「zip 炸弹」:以前只看上传文件大小,一个很小的 zip 能解出几十 GB;
现在导入前会先检查解压后的体积(单文件 ≤ 4 MB、合计 ≤ 8 MB),超了直接拒绝。
导入包里字段类型写错也不再报 500,而是明确告诉你哪里不对(400)。 - 账号没填也能保存其它设置:以前账号为空时整份配置都存不下去(连「自动升级」开关都改不了);
现在账号可以留空,服务会跳过登录并在状态页提示「账号未设置」(不计入退避)。 - 定时检查更结实:以前周期线程一旦遇到异常就会静默退出(之后再也不会自动登录);
现在会记一条带原因的日志、停一会儿继续跑。
🔒 加固(相对 v2.0.12.0)
- 安全响应头:页面与接口现在都带 CSP(
default-src 'none',只放宽内联脚本与样式 ——
因为页面本来就是全内联的)、X-Frame-Options: DENY(禁止被任何页面嵌框)、
X-Content-Type-Options: nosniff、Referrer-Policy: no-referrer、Permissions-Policy
(定位 / 摄像头 / 麦克风全部禁用)。 - 请求体上限:JSON 接口最多收 1 MB,超出直接回 413(以前是无条件读进来)。
拒绝时会先把已到达的字节排空再干净关连接 —— 否则 Windows 会因未读数据发 RST,
把 413 本身冲掉。 - 运行时单实例锁:手工再跑一份服务时,第二份现在什么都不做就退出(以前会先把
定时检查跑起来);升级 / 重启时对旧进程宽容,最多等 20 秒。
✨ 新增(相对 v2.0.11.0)
- 日志不再无限长大:业务日志超过 5 MB 自动轮转(保留 3 份旧档,合计 ≤ 20 MB),
升级日志超过 2 MB 轮转(保留 2 份)—— 以前只能靠你自己去删。
状态页「近 7 天」的统计会把旧档一起读,轮转不会让数字凭空变少。 - 一键诊断包(已脱敏):「关于 → 日志与诊断」里能看到各日志占用,并一键下载诊断包 ——
里面是版本 / 运行环境 / 服务状态 + 脱敏后的配置 + 各日志尾部(每个 ≤ 512 KB)。
账号打码成「前 4 位 + ******」、MAC 打码、不含任何密码;校园网内网 IP 与 Wi-Fi 名会保留
(排障需要),分享前请自行确认。反馈问题时发它,比截图 + 口述都准。
✨ 新增(相对 v2.0.10.0)
- 升级前备份整目录 + 升级失败自动回滚:以前升级前只留一个
联网_service.py的副本
(还放在%TEMP%),真要是新版本起不来,别的模块就回不去了 ✗。现在升级前会把全部代码文件
备份到安装目录的backup\<旧版本>\(每个文件都记 sha256),并且:- 执行器在两轮健康探测都探不到服务时,自动还原这些文件、重启服务、再探一次;
- Web UI「配置 → 自动升级 → 版本回滚」也能手动一键回退到某个备份版本(服务会重启,约 15 秒)。
- 回滚只动代码:
config.json、密码、配置方案都不动(备份里那份config.json只供你人工比对)。
备份保留 7 天、至少留最新 2 份;卸载时一并清掉。 - 安全兜底:备份被改坏、清单缺失、版本对不上、清单里文件名带路径分隔符 → 一律拒绝回滚
且不写任何文件(宁可不动,也不写出一套「半新半旧」的代码)。 - 顺带修掉一个陷阱:升级后的启动自检原先「找不到旧式备份就直接跳过」,换备份方案后会把
升级结果确认、AppExit 自愈、托盘自启项对齐全部跳过 ✗ —— 现在照常执行。
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.1.2.0 "Vega" |
| 文件名 | StardustFlashLink-Setup-v2.1.2.0.exe |
| 大小 | 11938372 bytes(约 11.39 MB) |
| SHA256 | fa9a4a6d8da145d669aeb31ad969637302f3a863e959aed295f3607f2756d0c0 |
| 构建提交 | f187545 |
| 构建编号 | #75 |
| 构建时间 | 2026-09-29 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2.0.4.2 的退出码与
服务状态回报,health= 是 v2.0.10.0 新增的 HTTP 健康探测结论 ——
OK 表示服务真的答上了 /api/health,比 sc query 可信)。
若这里是 health=FAIL,同一份日志里还会有一行「升级看门狗:HTTP 健康检查未通过」写明原因。
校验
certutil -hashfile StardustFlashLink-Setup-v2.1.2.0.exe SHA256
本 release 是自动升级通道(非 prerelease):客户端读
/releases/latest取版本号与 assetdigest(fail-closed 校验)。
固定下载链接仍见 prereleaseinstaller。
v2.1.1.0
Windows 安装程序 v2.1.1.0 "Vega"(织女星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
🏷 本版是
2.1线(代号Vega织女星)的第一次功能更新:把「网络一变就登」
和「多网络多账号」补上 ✓。代号、服务名、安装路径、配置结构都没有破坏性变化 ✓。
⚡ 网络一变就立刻登录(本版重点)
- 刚连上 Wi-Fi 不用再等:以前要等到下一个检查周期(最长 60 分钟)才会登录,
现在网络一通、或换到另一个 Wi-Fi,几秒内就会自动检查并登录 ✓。 - 场景切换当场生效:走进教学楼 / 回到宿舍,配置方案(网关、间隔、账号、后缀、守卫白名单)
会立刻跟着切 ✓ —— 方案里现在可以带账号与后缀了,所以「宿舍用移动账号、
教学楼用校园账号 + 无尾缀」这类用法能真正跑起来 ✓(老方案不受影响 ✓)。
📶 配置页能直接选 Wi-Fi 名
- 「允许的 Wi-Fi 名称」下面会显示当前 Wi-Fi,并把「保存过的 / 附近可见的」名字列成
可点的按钮 —— 点一下就填进去,不用再手打 ✓(手打错一个字母就会一直不生效 ✗)。 - 「配置方案」里的「自动匹配的 Wi-Fi 名」也有一键「用当前 Wi-Fi」✓。
👤 多账号(可选)
- 想给某个方案单独用一份密码:在安装目录里放
password.<方案名>.txt(一行密码),
该方案生效时会优先用它;没有这个文件就照旧用password.txt✓。 - 密码永远只存在本机文件里 —— 不写进
config.json✓、不进诊断包 ✓、界面不回显 ✓。
🔒 安全
- 诊断包里的账号脱敏现在覆盖所有账号(含方案里存的)✓,并且不再改动运行中的配置 ✓。
🔧 修复 / 加固(相对 v2.1.0.0 之前)
🔒 安全 / 修复(相对 v2.0.14.0)
- 登录失败不再可能把密码写进日志:登录用的是 GET、密码就在网址里,某些网络错误的
文字里会带上整条网址 —— 现在日志与错误提示只保留「错误类型 / HTTP 状态码」,
网址与密码参数会被自动擦掉(<url>/***)。 - 状态页的「下次检查」时间不再跳:以前服务与调度线程各写一次、两个值来回闪;
现在只在需要时写一次。 - 卸载更省心:删除用户数据那一步补上了默认选项与超时(无人值守时不会卡住,默认保留数据)。
- 源码安装不再挑 Python 版本路径:以前写死
C:\Python314,现在自动找py启动器
或常见安装位置。 - 两个批处理脚本头部写明了已知限制:安装路径里不能含
!(cmd 的延迟展开会吃掉它)。
🔧 修复 / 加固(相对 v2.0.13.0)
- 配置导入不再怕「zip 炸弹」:以前只看上传文件大小,一个很小的 zip 能解出几十 GB;
现在导入前会先检查解压后的体积(单文件 ≤ 4 MB、合计 ≤ 8 MB),超了直接拒绝。
导入包里字段类型写错也不再报 500,而是明确告诉你哪里不对(400)。 - 账号没填也能保存其它设置:以前账号为空时整份配置都存不下去(连「自动升级」开关都改不了);
现在账号可以留空,服务会跳过登录并在状态页提示「账号未设置」(不计入退避)。 - 定时检查更结实:以前周期线程一旦遇到异常就会静默退出(之后再也不会自动登录);
现在会记一条带原因的日志、停一会儿继续跑。
🔒 加固(相对 v2.0.12.0)
- 安全响应头:页面与接口现在都带 CSP(
default-src 'none',只放宽内联脚本与样式 ——
因为页面本来就是全内联的)、X-Frame-Options: DENY(禁止被任何页面嵌框)、
X-Content-Type-Options: nosniff、Referrer-Policy: no-referrer、Permissions-Policy
(定位 / 摄像头 / 麦克风全部禁用)。 - 请求体上限:JSON 接口最多收 1 MB,超出直接回 413(以前是无条件读进来)。
拒绝时会先把已到达的字节排空再干净关连接 —— 否则 Windows 会因未读数据发 RST,
把 413 本身冲掉。 - 运行时单实例锁:手工再跑一份服务时,第二份现在什么都不做就退出(以前会先把
定时检查跑起来);升级 / 重启时对旧进程宽容,最多等 20 秒。
✨ 新增(相对 v2.0.11.0)
- 日志不再无限长大:业务日志超过 5 MB 自动轮转(保留 3 份旧档,合计 ≤ 20 MB),
升级日志超过 2 MB 轮转(保留 2 份)—— 以前只能靠你自己去删。
状态页「近 7 天」的统计会把旧档一起读,轮转不会让数字凭空变少。 - 一键诊断包(已脱敏):「关于 → 日志与诊断」里能看到各日志占用,并一键下载诊断包 ——
里面是版本 / 运行环境 / 服务状态 + 脱敏后的配置 + 各日志尾部(每个 ≤ 512 KB)。
账号打码成「前 4 位 + ******」、MAC 打码、不含任何密码;校园网内网 IP 与 Wi-Fi 名会保留
(排障需要),分享前请自行确认。反馈问题时发它,比截图 + 口述都准。
✨ 新增(相对 v2.0.10.0)
- 升级前备份整目录 + 升级失败自动回滚:以前升级前只留一个
联网_service.py的副本
(还放在%TEMP%),真要是新版本起不来,别的模块就回不去了 ✗。现在升级前会把全部代码文件
备份到安装目录的backup\<旧版本>\(每个文件都记 sha256),并且:- 执行器在两轮健康探测都探不到服务时,自动还原这些文件、重启服务、再探一次;
- Web UI「配置 → 自动升级 → 版本回滚」也能手动一键回退到某个备份版本(服务会重启,约 15 秒)。
- 回滚只动代码:
config.json、密码、配置方案都不动(备份里那份config.json只供你人工比对)。
备份保留 7 天、至少留最新 2 份;卸载时一并清掉。 - 安全兜底:备份被改坏、清单缺失、版本对不上、清单里文件名带路径分隔符 → 一律拒绝回滚
且不写任何文件(宁可不动,也不写出一套「半新半旧」的代码)。 - 顺带修掉一个陷阱:升级后的启动自检原先「找不到旧式备份就直接跳过」,换备份方案后会把
升级结果确认、AppExit 自愈、托盘自启项对齐全部跳过 ✗ —— 现在照常执行。
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.1.1.0 "Sirius" |
| 文件名 | StardustFlashLink-Setup-v2.1.1.0.exe |
| 大小 | 11929896 bytes(约 11.38 MB) |
| SHA256 | af02668e2218fc9b3067b112a5e1314d964fb1f727506a620eed3d008226f963 |
| 构建提交 | 7786fdf |
| 构建编号 | #74 |
| 构建时间 | 2026-09-29 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2.0.4.2 的退出码与
服务状态回报,health= 是 v2.0.10.0 新增的 HTTP 健康探测结论 ——
OK 表示服务真的答上了 /api/health,比 sc query 可信)。
若这里是 health=FAIL,同一份日志里还会有一行「升级看门狗:HTTP 健康检查未通过」写明原因。
校验
certutil -hashfile StardustFlashLink-Setup-v2.1.1.0.exe SHA256
本 release 是自动升级通道(非 prerelease):客户端读
/releases/latest取版本号与 assetdigest(fail-closed 校验)。
固定下载链接仍见 prereleaseinstaller。
Windows 安装程序 v2.1.3.0(跟随最新构建 · 固定下载链接)
Windows 安装程序 v2.1.3.0 "Vega"(织女星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
🏷 本版是
2.1线(Vega织女星)的多网络多账号版:同一个方案可以带自己的
账号与密码,切方案时连密码一起换 ✓;顺带修掉「状态页那张凭据卡存不了账号」的毛病 ✓。
接口、配置结构、服务名、AppId、安装路径都没动 —— 老配置与升级路径不受影响 ✓。
👤 ① 每个方案可以有自己的账号与密码(多网络多账号)
- 以前方案能记住账号与后缀,但密码只有一份(公共
password.txt)——
「宿舍用移动账号、教学楼用校园账号」这种玩法,切完方案密码还是上一个 ✗。
现在方案可以带自己的密码:password.<方案名>.txt(一行密码)✓; - 配置页新增「选中方案的账号与密码」:选好方案 → 填账号 / 运营商 / 该方案的密码 →
点「保存到选中方案」✓;想改回共用公共密码,勾上「删除该方案的专属密码」再保存 ✓; - 切方案连密码一起换:密码以前只在服务启动时读过一次 —— 就算方案带了专属密码,
切完方案服务还在用旧密码,登录一路失败却「配置看着都对」✗。现在切方案后会重载密码 ✓
(重载失败只记一条日志、不算切换失败:配置已经切好了,不该因为读不出密码再回滚 ✓); - 界面上看得见:方案下拉里带「专属密码」标记,编辑区上面写明「『宿舍』有专属密码文件
(password.宿舍.txt)」✓;没设过专属密码的方案照旧用公共password.txt✓
(老用户零迁移 ✓); - 密码仍然永不写进
config.json✓、不进诊断包 ✓、界面不回显 ✓。
💾 ② 状态页那张凭据卡现在真的能存账号了(修复)
- v2.1.2.0 把「账户与登录密码」从配置页搬到了状态页,但按钮沿用的还是老实现 ——
只存密码:账号和运营商在界面上能改,点「保存」却什么都没发生(看着像存上了 ✗)。
现在按钮叫「保存账号与密码」,一次存下账号 + 运营商 + 密码 ✓; - 存的姿势也修了:账号 / 运营商走部分更新(只改这两个键),
不会再把网关 / 端口 / 间隔 / 守卫设置一起重置回默认值 ✗;改某个方案同理走合并改 ✓; - 卡上写明保存范围:账号与运营商进本机配置,密码永不写进配置文件 ✓(只进密码文件)。
🔧 ③ 其它修复
- 兜底异常处理里的日志调用换成模块自带日志:以前若 logger 没被注入,这里会先报
NameError、把真正的异常盖住 —— 客户端只看到「连接被重置」,服务端一条线索都没有 ✗; - 改的若正是当前方案,保存凭据后会自动重新应用一次 → 状态页立刻显示新账号 ✓。
🎨 v2.1.2.0:界面重做(四页信息架构 + 星尘风默认主题)
🏷 那是
2.1线的界面重做版:状态 / 配置 / 日志 / 关于四页的信息架构重新排过,
「星尘风」成为默认主题,全站字体统一到 MiSans ✓。
接口、配置结构、服务名、AppId、安装路径都没动 —— 老配置与升级路径不受影响 ✓。
🎨 四页信息架构重做(本版重点)
- 状态页:状态与「立即登录」合成一张卡;下面两条统计条 —— 日常 5 格
(网络可达性 / 当前账号 / 上次登录 / 上次错误 / 下次检查)+ 诊断 4 格
(在线率 / 掉线重登 / 平均恢复耗时 / 当前延迟);右栏是「账户与登录密码」。
诊断指标不再折叠,一进页面就能看全 ✓。 - 配置页:左栏「配置方案 + 网络与服务端口」、右栏「自动化」——
升级相关整块搬去了「关于 → 更新」(配置页只留「本机怎么上网」的事)✓。 - 日志页:改成终端窗口(红黄绿灯 + 行数 / 偏移 / 体积 + 过滤 + 自动滚动),
下面是「日志占用与诊断包」✓。 - 关于页:版本 / 运行时长 → 更新(结论条 + 立即检查 / 立即升级 / 查看升级历史 +
升级流水 + 折叠的「升级设置(进阶)」)→ 数据与文件位置 → 服务与维护 ✓。
🌟 新默认主题「星尘风」+ 全站字体统一
- 右上角一键三态循环:星尘(新默认)→ 亮色 → 暗色;老主题不受影响 ✓。
- 字体统一到 MiSans(本机装了就用,没装自动退回系统字体栈 —— 不挑电脑、不缺字)✓。
🧹 界面瘦身
- 撤掉界面上那些「实现说明」:顶栏的监听 / 数据位置提示条、诊断指标的数据来源脚注、
凭据说明段;「关于」页的安装方式判据改到徽标悬停提示上(想核对时鼠标停一下就有)✓。 - 删掉「连接质量」柱图板块(4 项诊断指标已经常显在状态页)✓。
🔧 排版修复
- 长路径只在目录分隔符后换行,不再断出「…config.js / on」这种半截文件名 ✓;
- 统计条里的日期不再折成三行(最多两行:日期 / 时间)✓;
- 卡片间距统一到一套令牌,各页左右边界与行距对齐 ✓;
- 「服务与维护」的按钮改成小尺寸,窄栏里不再占两行 ✓。
⚡ v2.1.1.0:网络一变就立刻登录
- 刚连上 Wi-Fi 不用再等:以前要等到下一个检查周期(最长 60 分钟)才会登录,
现在网络一通、或换到另一个 Wi-Fi,几秒内就会自动检查并登录 ✓。 - 场景切换当场生效:走进教学楼 / 回到宿舍,配置方案(网关、间隔、账号、后缀、守卫白名单)
会立刻跟着切 ✓ —— 方案里现在可以带账号与后缀了,所以「宿舍用移动账号、
教学楼用校园账号 + 无尾缀」这类用法能真正跑起来 ✓(老方案不受影响 ✓)。
📶 配置页能直接选 Wi-Fi 名
- 「允许的 Wi-Fi 名称」下面会显示当前 Wi-Fi,并把「保存过的 / 附近可见的」名字列成
可点的按钮 —— 点一下就填进去,不用再手打 ✓(手打错一个字母就会一直不生效 ✗)。 - 「配置方案」里的「自动匹配的 Wi-Fi 名」也有一键「用当前 Wi-Fi」✓。
👤 多账号(可选)
- 想给某个方案单独用一份密码:在安装目录里放
password.<方案名>.txt(一行密码),
该方案生效时会优先用它;没有这个文件就照旧用password.txt✓。 - 密码永远只存在本机文件里 —— 不写进
config.json✓、不进诊断包 ✓、界面不回显 ✓。
🔒 安全
- 诊断包里的账号脱敏现在覆盖所有账号(含方案里存的)✓,并且不再改动运行中的配置 ✓。
🔧 修复 / 加固(相对 v2.1.0.0 之前)
🔒 安全 / 修复(相对 v2.0.14.0)
- 登录失败不再可能把密码写进日志:登录用的是 GET、密码就在网址里,某些网络错误的
文字里会带上整条网址 —— 现在日志与错误提示只保留「错误类型 / HTTP 状态码」,
网址与密码参数会被自动擦掉(<url>/***)。 - 状态页的「下次检查」时间不再跳:以前服务与调度线程各写一次、两个值来回闪;
现在只在需要时写一次。 - 卸载更省心:删除用户数据那一步补上了默认选项与超时(无人值守时不会卡住,默认保留数据)。
- 源码安装不再挑 Python 版本路径:以前写死
C:\Python314,现在自动找py启动器
或常见安装位置。 - 两个批处理脚本头部写明了已知限制:安装路径里不能含
!(cmd 的延迟展开会吃掉它)。
🔧 修复 / 加固(相对 v2.0.13.0)
- 配置导入不再怕「zip 炸弹」:以前只看上传文件大小,一个很小的 zip 能解出几十 GB;
现在导入前会先检查解压后的体积(单文件 ≤ 4 MB、合计 ≤ 8 MB),超了直接拒绝。
导入包里字段类型写错也不再报 500,而是明确告诉你哪里不对(400)。 - 账号没填也能保存其它设置:以前账号为空时整份配置都存不下去(连「自动升级」开关都改不了);
现在账号可以留空,服务会跳过登录并在状态页提示「账号未设置」(不计入退避)。 - 定时检查更结实:以前周期线程一旦遇到异常就会静默退出(之后再也不会自动登录);
现在会记一条带原因的日志、停一会儿继续跑。
🔒 加固(相对 v2.0.12.0)
- 安全响应头:页面与接口现在都带 CSP(
default-src 'none',只放宽内联脚本与样式 ——
因为页面本来就是全内联的)、X-Frame-Options: DENY(禁止被任何页面嵌框)、
X-Content-Type-Options: nosniff、Referrer-Policy: no-referrer、Permissions-Policy
(定位 / 摄像头 / 麦克风全部禁用)。 - 请求体上限:JSON 接口最多收 1 MB,超出直接回 413(以前是无条件读进来)。
拒绝时会先把已到达的字节排空再干净关连接 —— 否则 Windows 会因未读数据发 RST,
把 413 本身冲掉。 - 运行时单实例锁:手工再跑一份服务时,第二份现在什么都不做就退出(以前会先把
定时检查跑起来);升级 / 重启时对旧进程宽容,最多等 20 秒。
✨ 新增(相对 v2.0.11.0)
- 日志不再无限长大:业务日志超过 5 MB 自动轮转(保留 3 份旧档,合计 ≤ 20 MB),
升级日志超过 2 MB 轮转(保留 2 份)—— 以前只能靠你自己去删。
状态页「近 7 天」的统计会把旧档一起读,轮转不会让数字凭空变少。 - 一键诊断包(已脱敏):「关于 → 日志与诊断」里能看到各日志占用,并一键下载诊断包 ——
里面是版本 / 运行环境 / 服务状态 + 脱敏后的配置 + 各日志尾部(每个 ≤ 512 KB)。
账号打码成「前 4 位 + ******」、MAC 打码、不含任何密码;校园网内网 IP 与 Wi-Fi 名会保留
(排障需要),分享前请自行确认。反馈问题时发它,比截图 + 口述都准。
✨ 新增(相对 v2.0.10.0)
- 升级前备份整目录 + 升级失败自动回滚:以前升级前只留一个
联网_service.py的副本
(还放在%TEMP%),真要是新版本起不来,别的模块就回不去了 ✗。现在升级前会把全部代码文件
备份到安装目录的backup\<旧版本>\(每个文件都记 sha256),并且:- 执行器在两轮健康探测都探不到服务时,自动还原这些文件、重启服务、再探一次;
- Web UI「配置 → 自动升级 → 版本回滚」也能手动一键回退到某个备份版本(服务会重启,约 15 秒)。
- 回滚只动代码:
config.json、密码、配置方案都不动(备份里那份config.json只供你人工比对)。
备份保留 7 天、至少留最新 2 份;卸载时一并清掉。 - 安全兜底:备份被改坏、清单缺失、版本对不上、清单里文件名带路径分隔符 → 一律拒绝回滚
且不写任何文件(宁可不动,也不写出一套「半新半旧」的代码)。 - 顺带修掉一个陷阱:升级后的启动自检原先「找不到旧式备份就直接跳过」,换备份方案后会把
升级结果确认、AppExit 自愈、托盘自启项对齐全部跳过 ✗ —— 现在照常执行。
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.1.3.0 "Vega" |
| 文件名 | StardustFlashLink-Setup-v2.1.3.0.exe |
| 大小 | 11943884 bytes(约 11.39 MB) |
| SHA256 | bf13a399bba9c350e67b49298bd8212b27ebc85e4da6a839e8742373a151bdc4 |
| 构建提交 | f071807 |
| 构建编号 | #76 |
| 构建时间 | 2026-09-29 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2...
v2.1.0.0
Windows 安装程序 v2.1.0.0 "Vega"(织女星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
🏷 本版起进入
2.1版本线,代号Vega(织女星) —— 上一版v2.0.14.0是2.0线
(Sirius天狼星)的收束。代号只出现在标题与界面里,服务名 / 安装路径 / 配置都不变。
🔒 安全 / 修复(相对 v2.0.14.0)
- 登录失败不再可能把密码写进日志:登录用的是 GET、密码就在网址里,某些网络错误的
文字里会带上整条网址 —— 现在日志与错误提示只保留「错误类型 / HTTP 状态码」,
网址与密码参数会被自动擦掉(<url>/***)。 - 状态页的「下次检查」时间不再跳:以前服务与调度线程各写一次、两个值来回闪;
现在只在需要时写一次。 - 卸载更省心:删除用户数据那一步补上了默认选项与超时(无人值守时不会卡住,默认保留数据)。
- 源码安装不再挑 Python 版本路径:以前写死
C:\Python314,现在自动找py启动器
或常见安装位置。 - 两个批处理脚本头部写明了已知限制:安装路径里不能含
!(cmd 的延迟展开会吃掉它)。
🔧 修复 / 加固(相对 v2.0.13.0)
- 配置导入不再怕「zip 炸弹」:以前只看上传文件大小,一个很小的 zip 能解出几十 GB;
现在导入前会先检查解压后的体积(单文件 ≤ 4 MB、合计 ≤ 8 MB),超了直接拒绝。
导入包里字段类型写错也不再报 500,而是明确告诉你哪里不对(400)。 - 账号没填也能保存其它设置:以前账号为空时整份配置都存不下去(连「自动升级」开关都改不了);
现在账号可以留空,服务会跳过登录并在状态页提示「账号未设置」(不计入退避)。 - 定时检查更结实:以前周期线程一旦遇到异常就会静默退出(之后再也不会自动登录);
现在会记一条带原因的日志、停一会儿继续跑。
🔒 加固(相对 v2.0.12.0)
- 安全响应头:页面与接口现在都带 CSP(
default-src 'none',只放宽内联脚本与样式 ——
因为页面本来就是全内联的)、X-Frame-Options: DENY(禁止被任何页面嵌框)、
X-Content-Type-Options: nosniff、Referrer-Policy: no-referrer、Permissions-Policy
(定位 / 摄像头 / 麦克风全部禁用)。 - 请求体上限:JSON 接口最多收 1 MB,超出直接回 413(以前是无条件读进来)。
拒绝时会先把已到达的字节排空再干净关连接 —— 否则 Windows 会因未读数据发 RST,
把 413 本身冲掉。 - 运行时单实例锁:手工再跑一份服务时,第二份现在什么都不做就退出(以前会先把
定时检查跑起来);升级 / 重启时对旧进程宽容,最多等 20 秒。
✨ 新增(相对 v2.0.11.0)
- 日志不再无限长大:业务日志超过 5 MB 自动轮转(保留 3 份旧档,合计 ≤ 20 MB),
升级日志超过 2 MB 轮转(保留 2 份)—— 以前只能靠你自己去删。
状态页「近 7 天」的统计会把旧档一起读,轮转不会让数字凭空变少。 - 一键诊断包(已脱敏):「关于 → 日志与诊断」里能看到各日志占用,并一键下载诊断包 ——
里面是版本 / 运行环境 / 服务状态 + 脱敏后的配置 + 各日志尾部(每个 ≤ 512 KB)。
账号打码成「前 4 位 + ******」、MAC 打码、不含任何密码;校园网内网 IP 与 Wi-Fi 名会保留
(排障需要),分享前请自行确认。反馈问题时发它,比截图 + 口述都准。
✨ 新增(相对 v2.0.10.0)
- 升级前备份整目录 + 升级失败自动回滚:以前升级前只留一个
联网_service.py的副本
(还放在%TEMP%),真要是新版本起不来,别的模块就回不去了 ✗。现在升级前会把全部代码文件
备份到安装目录的backup\<旧版本>\(每个文件都记 sha256),并且:- 执行器在两轮健康探测都探不到服务时,自动还原这些文件、重启服务、再探一次;
- Web UI「配置 → 自动升级 → 版本回滚」也能手动一键回退到某个备份版本(服务会重启,约 15 秒)。
- 回滚只动代码:
config.json、密码、配置方案都不动(备份里那份config.json只供你人工比对)。
备份保留 7 天、至少留最新 2 份;卸载时一并清掉。 - 安全兜底:备份被改坏、清单缺失、版本对不上、清单里文件名带路径分隔符 → 一律拒绝回滚
且不写任何文件(宁可不动,也不写出一套「半新半旧」的代码)。 - 顺带修掉一个陷阱:升级后的启动自检原先「找不到旧式备份就直接跳过」,换备份方案后会把
升级结果确认、AppExit 自愈、托盘自启项对齐全部跳过 ✗ —— 现在照常执行。
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.1.0.0 "Sirius" |
| 文件名 | StardustFlashLink-Setup-v2.1.0.0.exe |
| 大小 | 11918944 bytes(约 11.37 MB) |
| SHA256 | aea772f6e11bcf8a89fd8d1f6168d1565e21cbcc287b26c8b2f05016e664ab38 |
| 构建提交 | 4b9ab4a |
| 构建编号 | #73 |
| 构建时间 | 2026-09-28 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2.0.4.2 的退出码与
服务状态回报,health= 是 v2.0.10.0 新增的 HTTP 健康探测结论 ——
OK 表示服务真的答上了 /api/health,比 sc query 可信)。
若这里是 health=FAIL,同一份日志里还会有一行「升级看门狗:HTTP 健康检查未通过」写明原因。
校验
certutil -hashfile StardustFlashLink-Setup-v2.1.0.0.exe SHA256
本 release 是自动升级通道(非 prerelease):客户端读
/releases/latest取版本号与 assetdigest(fail-closed 校验)。
固定下载链接仍见 prereleaseinstaller。
v2.0.14.0
Windows 安装程序 v2.0.14.0 "Sirius"(天狼星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
🔧 修复 / 加固(相对 v2.0.13.0)
- 配置导入不再怕「zip 炸弹」:以前只看上传文件大小,一个很小的 zip 能解出几十 GB;
现在导入前会先检查解压后的体积(单文件 ≤ 4 MB、合计 ≤ 8 MB),超了直接拒绝。
导入包里字段类型写错也不再报 500,而是明确告诉你哪里不对(400)。 - 账号没填也能保存其它设置:以前账号为空时整份配置都存不下去(连「自动升级」开关都改不了);
现在账号可以留空,服务会跳过登录并在状态页提示「账号未设置」(不计入退避)。 - 定时检查更结实:以前周期线程一旦遇到异常就会静默退出(之后再也不会自动登录);
现在会记一条带原因的日志、停一会儿继续跑。
🔒 加固(相对 v2.0.12.0)
- 安全响应头:页面与接口现在都带 CSP(
default-src 'none',只放宽内联脚本与样式 ——
因为页面本来就是全内联的)、X-Frame-Options: DENY(禁止被任何页面嵌框)、
X-Content-Type-Options: nosniff、Referrer-Policy: no-referrer、Permissions-Policy
(定位 / 摄像头 / 麦克风全部禁用)。 - 请求体上限:JSON 接口最多收 1 MB,超出直接回 413(以前是无条件读进来)。
拒绝时会先把已到达的字节排空再干净关连接 —— 否则 Windows 会因未读数据发 RST,
把 413 本身冲掉。 - 运行时单实例锁:手工再跑一份服务时,第二份现在什么都不做就退出(以前会先把
定时检查跑起来);升级 / 重启时对旧进程宽容,最多等 20 秒。
✨ 新增(相对 v2.0.11.0)
- 日志不再无限长大:业务日志超过 5 MB 自动轮转(保留 3 份旧档,合计 ≤ 20 MB),
升级日志超过 2 MB 轮转(保留 2 份)—— 以前只能靠你自己去删。
状态页「近 7 天」的统计会把旧档一起读,轮转不会让数字凭空变少。 - 一键诊断包(已脱敏):「关于 → 日志与诊断」里能看到各日志占用,并一键下载诊断包 ——
里面是版本 / 运行环境 / 服务状态 + 脱敏后的配置 + 各日志尾部(每个 ≤ 512 KB)。
账号打码成「前 4 位 + ******」、MAC 打码、不含任何密码;校园网内网 IP 与 Wi-Fi 名会保留
(排障需要),分享前请自行确认。反馈问题时发它,比截图 + 口述都准。
✨ 新增(相对 v2.0.10.0)
- 升级前备份整目录 + 升级失败自动回滚:以前升级前只留一个
联网_service.py的副本
(还放在%TEMP%),真要是新版本起不来,别的模块就回不去了 ✗。现在升级前会把全部代码文件
备份到安装目录的backup\<旧版本>\(每个文件都记 sha256),并且:- 执行器在两轮健康探测都探不到服务时,自动还原这些文件、重启服务、再探一次;
- Web UI「配置 → 自动升级 → 版本回滚」也能手动一键回退到某个备份版本(服务会重启,约 15 秒)。
- 回滚只动代码:
config.json、密码、配置方案都不动(备份里那份config.json只供你人工比对)。
备份保留 7 天、至少留最新 2 份;卸载时一并清掉。 - 安全兜底:备份被改坏、清单缺失、版本对不上、清单里文件名带路径分隔符 → 一律拒绝回滚
且不写任何文件(宁可不动,也不写出一套「半新半旧」的代码)。 - 顺带修掉一个陷阱:升级后的启动自检原先「找不到旧式备份就直接跳过」,换备份方案后会把
升级结果确认、AppExit 自愈、托盘自启项对齐全部跳过 ✗ —— 现在照常执行。
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.0.14.0 "Sirius" |
| 文件名 | StardustFlashLink-Setup-v2.0.14.0.exe |
| 大小 | 11919714 bytes(约 11.37 MB) |
| SHA256 | 734e2fc22d474bc078c135167127d164e4dcd94081a767abb9976291803d8cf8 |
| 构建提交 | dd2db43 |
| 构建编号 | #71 |
| 构建时间 | 2026-09-28 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2.0.4.2 的退出码与
服务状态回报,health= 是 v2.0.10.0 新增的 HTTP 健康探测结论 ——
OK 表示服务真的答上了 /api/health,比 sc query 可信)。
若这里是 health=FAIL,同一份日志里还会有一行「升级看门狗:HTTP 健康检查未通过」写明原因。
校验
certutil -hashfile StardustFlashLink-Setup-v2.0.14.0.exe SHA256
本 release 是自动升级通道(非 prerelease):客户端读
/releases/latest取版本号与 assetdigest(fail-closed 校验)。
固定下载链接仍见 prereleaseinstaller。
v2.0.13.0
Windows 安装程序 v2.0.13.0 "Sirius"(天狼星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
🔒 加固(相对 v2.0.12.0)
- 安全响应头:页面与接口现在都带 CSP(
default-src 'none',只放宽内联脚本与样式 ——
因为页面本来就是全内联的)、X-Frame-Options: DENY(禁止被任何页面嵌框)、
X-Content-Type-Options: nosniff、Referrer-Policy: no-referrer、Permissions-Policy
(定位 / 摄像头 / 麦克风全部禁用)。 - 请求体上限:JSON 接口最多收 1 MB,超出直接回 413(以前是无条件读进来)。
拒绝时会先把已到达的字节排空再干净关连接 —— 否则 Windows 会因未读数据发 RST,
把 413 本身冲掉。 - 运行时单实例锁:手工再跑一份服务时,第二份现在什么都不做就退出(以前会先把
定时检查跑起来);升级 / 重启时对旧进程宽容,最多等 20 秒。
✨ 新增(相对 v2.0.11.0)
- 日志不再无限长大:业务日志超过 5 MB 自动轮转(保留 3 份旧档,合计 ≤ 20 MB),
升级日志超过 2 MB 轮转(保留 2 份)—— 以前只能靠你自己去删。
状态页「近 7 天」的统计会把旧档一起读,轮转不会让数字凭空变少。 - 一键诊断包(已脱敏):「关于 → 日志与诊断」里能看到各日志占用,并一键下载诊断包 ——
里面是版本 / 运行环境 / 服务状态 + 脱敏后的配置 + 各日志尾部(每个 ≤ 512 KB)。
账号打码成「前 4 位 + ******」、MAC 打码、不含任何密码;校园网内网 IP 与 Wi-Fi 名会保留
(排障需要),分享前请自行确认。反馈问题时发它,比截图 + 口述都准。
✨ 新增(相对 v2.0.10.0)
- 升级前备份整目录 + 升级失败自动回滚:以前升级前只留一个
联网_service.py的副本
(还放在%TEMP%),真要是新版本起不来,别的模块就回不去了 ✗。现在升级前会把全部代码文件
备份到安装目录的backup\<旧版本>\(每个文件都记 sha256),并且:- 执行器在两轮健康探测都探不到服务时,自动还原这些文件、重启服务、再探一次;
- Web UI「配置 → 自动升级 → 版本回滚」也能手动一键回退到某个备份版本(服务会重启,约 15 秒)。
- 回滚只动代码:
config.json、密码、配置方案都不动(备份里那份config.json只供你人工比对)。
备份保留 7 天、至少留最新 2 份;卸载时一并清掉。 - 安全兜底:备份被改坏、清单缺失、版本对不上、清单里文件名带路径分隔符 → 一律拒绝回滚
且不写任何文件(宁可不动,也不写出一套「半新半旧」的代码)。 - 顺带修掉一个陷阱:升级后的启动自检原先「找不到旧式备份就直接跳过」,换备份方案后会把
升级结果确认、AppExit 自愈、托盘自启项对齐全部跳过 ✗ —— 现在照常执行。
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.0.13.0 "Sirius" |
| 文件名 | StardustFlashLink-Setup-v2.0.13.0.exe |
| 大小 | 11912120 bytes(约 11.36 MB) |
| SHA256 | 641e24c02191477225384d7409e76a6f6e2020ec18e113026053d92b6f85442f |
| 构建提交 | f8b152f |
| 构建编号 | #70 |
| 构建时间 | 2026-09-28 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2.0.4.2 的退出码与
服务状态回报,health= 是 v2.0.10.0 新增的 HTTP 健康探测结论 ——
OK 表示服务真的答上了 /api/health,比 sc query 可信)。
若这里是 health=FAIL,同一份日志里还会有一行「升级看门狗:HTTP 健康检查未通过」写明原因。
校验
certutil -hashfile StardustFlashLink-Setup-v2.0.13.0.exe SHA256
本 release 是自动升级通道(非 prerelease):客户端读
/releases/latest取版本号与 assetdigest(fail-closed 校验)。
固定下载链接仍见 prereleaseinstaller。
v2.0.12.0
Windows 安装程序 v2.0.12.0 "Sirius"(天狼星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
✨ 新增(相对 v2.0.11.0)
- 日志不再无限长大:业务日志超过 5 MB 自动轮转(保留 3 份旧档,合计 ≤ 20 MB),
升级日志超过 2 MB 轮转(保留 2 份)—— 以前只能靠你自己去删。
状态页「近 7 天」的统计会把旧档一起读,轮转不会让数字凭空变少。 - 一键诊断包(已脱敏):「关于 → 日志与诊断」里能看到各日志占用,并一键下载诊断包 ——
里面是版本 / 运行环境 / 服务状态 + 脱敏后的配置 + 各日志尾部(每个 ≤ 512 KB)。
账号打码成「前 4 位 + ******」、MAC 打码、不含任何密码;校园网内网 IP 与 Wi-Fi 名会保留
(排障需要),分享前请自行确认。反馈问题时发它,比截图 + 口述都准。
✨ 新增(相对 v2.0.10.0)
- 升级前备份整目录 + 升级失败自动回滚:以前升级前只留一个
联网_service.py的副本
(还放在%TEMP%),真要是新版本起不来,别的模块就回不去了 ✗。现在升级前会把全部代码文件
备份到安装目录的backup\<旧版本>\(每个文件都记 sha256),并且:- 执行器在两轮健康探测都探不到服务时,自动还原这些文件、重启服务、再探一次;
- Web UI「配置 → 自动升级 → 版本回滚」也能手动一键回退到某个备份版本(服务会重启,约 15 秒)。
- 回滚只动代码:
config.json、密码、配置方案都不动(备份里那份config.json只供你人工比对)。
备份保留 7 天、至少留最新 2 份;卸载时一并清掉。 - 安全兜底:备份被改坏、清单缺失、版本对不上、清单里文件名带路径分隔符 → 一律拒绝回滚
且不写任何文件(宁可不动,也不写出一套「半新半旧」的代码)。 - 顺带修掉一个陷阱:升级后的启动自检原先「找不到旧式备份就直接跳过」,换备份方案后会把
升级结果确认、AppExit 自愈、托盘自启项对齐全部跳过 ✗ —— 现在照常执行。
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.0.12.0 "Sirius" |
| 文件名 | StardustFlashLink-Setup-v2.0.12.0.exe |
| 大小 | 11909616 bytes(约 11.36 MB) |
| SHA256 | 2bf2c19dff5e19fe2b313555cbc8f13c9bb7ad0ffdabb1bc6699933a2b2f272f |
| 构建提交 | f02c503 |
| 构建编号 | #69 |
| 构建时间 | 2026-09-28 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2.0.4.2 的退出码与
服务状态回报,health= 是 v2.0.10.0 新增的 HTTP 健康探测结论 ——
OK 表示服务真的答上了 /api/health,比 sc query 可信)。
若这里是 health=FAIL,同一份日志里还会有一行「升级看门狗:HTTP 健康检查未通过」写明原因。
校验
certutil -hashfile StardustFlashLink-Setup-v2.0.12.0.exe SHA256
本 release 是自动升级通道(非 prerelease):客户端读
/releases/latest取版本号与 assetdigest(fail-closed 校验)。
固定下载链接仍见 prereleaseinstaller。
v2.0.11.0
Windows 安装程序 v2.0.11.0 "Sirius"(天狼星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
✨ 新增(相对 v2.0.10.0)
- 升级前备份整目录 + 升级失败自动回滚:以前升级前只留一个
联网_service.py的副本
(还放在%TEMP%),真要是新版本起不来,别的模块就回不去了 ✗。现在升级前会把全部代码文件
备份到安装目录的backup\<旧版本>\(每个文件都记 sha256),并且:- 执行器在两轮健康探测都探不到服务时,自动还原这些文件、重启服务、再探一次;
- Web UI「配置 → 自动升级 → 版本回滚」也能手动一键回退到某个备份版本(服务会重启,约 15 秒)。
- 回滚只动代码:
config.json、密码、配置方案都不动(备份里那份config.json只供你人工比对)。
备份保留 7 天、至少留最新 2 份;卸载时一并清掉。 - 安全兜底:备份被改坏、清单缺失、版本对不上、清单里文件名带路径分隔符 → 一律拒绝回滚
且不写任何文件(宁可不动,也不写出一套「半新半旧」的代码)。 - 顺带修掉一个陷阱:升级后的启动自检原先「找不到旧式备份就直接跳过」,换备份方案后会把
升级结果确认、AppExit 自愈、托盘自启项对齐全部跳过 ✗ —— 现在照常执行。
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.0.11.0 "Sirius" |
| 文件名 | StardustFlashLink-Setup-v2.0.11.0.exe |
| 大小 | 11907505 bytes(约 11.36 MB) |
| SHA256 | f02fc84b63d63db24b14f13c2b455c757db0489ef0d6da17988198acaadfc40d |
| 构建提交 | 94b8926 |
| 构建编号 | #68 |
| 构建时间 | 2026-09-28 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2.0.4.2 的退出码与
服务状态回报,health= 是 v2.0.10.0 新增的 HTTP 健康探测结论 ——
OK 表示服务真的答上了 /api/health,比 sc query 可信)。
若这里是 health=FAIL,同一份日志里还会有一行「升级看门狗:HTTP 健康检查未通过」写明原因。
校验
certutil -hashfile StardustFlashLink-Setup-v2.0.11.0.exe SHA256
本 release 是自动升级通道(非 prerelease):客户端读
/releases/latest取版本号与 assetdigest(fail-closed 校验)。
固定下载链接仍见 prereleaseinstaller。
v2.0.10.0
Windows 安装程序 v2.0.10.0 "Sirius"(天狼星)(Inno Setup 自动构建 · 安装包已内嵌 Python,无需预装)。
本版变更
✨ 新增(相对 v2.0.9.1)
- 升级收尾改探 HTTP 健康端点:自动升级跑完安装器后,执行器会用随包内嵌的 Python 探一次
http://127.0.0.1:<你的端口>/api/health—— 只有拿到{"ok": true}才算「服务真的活了」。
此前只看sc query,而那是 nssm 的 wrapper:里面的 Python 崩了它照样显示 RUNNING
(AppExit=Ignore:不重启也不报错),所以「升级把服务弄挂了」以前要等你自己发现 ✗。 - 探不到就自动重启重试:先
sc stop+sc start重启一次服务,再给一个窗口重探。 - 失败会留下明确告警:结论写进
logs\upgrade.log(中文、带时间戳)。
服务真起不来时 Web UI 也打不开,那行日志就是唯一的告警面 ——
托盘右键「打开日志目录」即可看到,里面会写明「服务可能没起来」与下一步该看哪个日志。 - 顺手修掉一个从 v2.0.4.2 起就在的老坑:升级记录里的
installer_rc=(安装器退出码)其实
从来没真正写下来过 ——echo installer_rc=0>"…"里的数字紧贴>,cmd 会把它当成
「句柄 0 重定向」→ 文件被写空、文本跑进 stdout ✗,于是「安装器非 0 退出码就告警」那条
一直是死代码。现在改成把重定向写在命令前面,退出码正常落盘,装失败时日志里能看见它。 - 探针自包含(只用标准库、不读你的配置以外的东西、不走系统代理),跑完自删;
内嵌 Python 或探针缺失时自动退回旧判据(不影响升级本身)。
⚠️ 如果你装过 v2.0.8.0 且 Web UI 打不开 / 托盘说「服务未响应」:
重新运行本安装包即可恢复(会自动停服务 → 补齐文件 → 再启动服务;配置与密码不变)。
🔴 紧急修复(相对 v2.0.8.0)
- 修「升级时安装中途回滚把安装弄坏」:托盘进程锁着
{app}\python\libcrypto-3.dll,
安装器替换它失败后静默模式会 Abort 并回滚 ✗ —— 结果新脚本已就位、新增的metrics.py
被回滚删掉,服务启动即崩、Web UI 端口消失。现在安装器在写任何文件之前先请走托盘
(只匹配「tray.py + 本安装目录」的进程,不误伤别的程序),并且可选模块缺失时服务降级运行
(只是少一块面板,不影响登录与页面)。
⚠️ 装过 v2.0.9.0 且 Web UI 打不开 / 托盘说「服务未响应」的话:重新运行本安装包即可恢复
(配置、密码、方案都不动)。
🔴 紧急修复(相对 v2.0.9.0)
- 修「升级后服务起不来」:v2.0.9.0 在服务主流程里多写了一句
import protocol as _protocol_mod,
而 Python 里函数内的 import 会让该名字在整个函数里变成局部变量 ✗ → 同一函数里更早的
_protocol_mod._attach(...)直接UnboundLocalError→ 服务启动即退 ✗(nssm 配的是
AppExit=Ignore,不会自动重启,所以表现成"服务在跑、网页打不开")。
已删掉该行,并加静态守卫:服务里出现「函数内 import 模块别名」一律判失败。
✨ 新增(相对 v2.0.8.1)
- 配置方案:给「教室 / 宿舍 / 家里」各存一套位置相关设置(认证网关、检查间隔、
网络位置守卫白名单),配置页一键切换;填了「自动匹配的 Wi-Fi 名」的方案还能在打开
「按 Wi-Fi 名自动切换」后自动切换(默认关)。 - 账号、密码、升级设置不会进方案,切换方案也不动它们 —— 换的只是"哪儿该不该登录"。
- 新增
GET /api/profiles与POST /api/profiles/save|activate|delete|auto四个写接口
(老接口与老配置完全不受影响)。
✨ 新增(相对 v2.0.7.1)
- 连接质量面板:状态页新增「在线率(近 7 天)/ 掉线重登 / 平均恢复耗时 / 当前延迟」
与一张近 7 天柱状图。数据全部从已有日志现算,不新增状态文件 —— 服务重启不清零、
升级不丢数据。延迟量的是到校园网关的 TCP 握手(校园网常禁 ping)。 - 接口
GET /api/metrics?days=7(1–30 天);面板属于锦上添花:日志被删、参数非法、
统计出错都只在面板上显示空白,不影响状态页其它部分。
🔧 修复(相对 v2.0.7.0)
- 升级后托盘会自己换上新代码:以前升级只换了磁盘上的文件,正在跑的托盘还留在内存里的
旧版本 —— 于是像「睡醒 / 换网立刻重连」这种新功能要等到下次注销 / 重启才生效 ✗。
现在托盘盯着自己的脚本指纹(mtime+ 大小),一变就先放开单实例锁 → 起新进程 → 自己退出;
万一新进程起不来,会把锁拿回来继续跑(只记一行日志,不会反复重试)。
✨ 新增(相对 v2.0.6.3)
- 睡醒 / 换网之后立刻重连:以前合盖睡一觉、插网线、换 Wi-Fi 之后,服务可能要等到下一次
周期检查(默认 30 分钟)才补上登录 ✗。现在托盘盯着这两类事件 —— 系统唤醒(等 4 秒让网卡
连上)与网络地址变化(立刻)—— 一到就触发一次登录检查。 - 事件有 5 秒去抖(唤醒时电源 + 无线 + DHCP 常常连着来);拿不到事件时自动退化成原来的
10 秒轮询,不会因为新功能变脆弱。
🔧 修复(相对 v2.0.6.2)
- 升级 / 检查按钮不再「假成功」:先点「立即检查更新」、紧接着点「立即升级」时,
第二个请求会被升级锁挡掉,但接口一律先回「已提交」✗ —— 界面提示「升级已启动」,
实际什么都没发生。现在两个入口先探锁再回车:忙就回 409 + 当前进度
(「任务进行中(检查 GitHub 最新版本...),请稍候再试」),空闲才回「已提交」并真的开跑。
🔧 修复(相对 v2.0.6.1)
- 自动升级上来的用户,托盘也会自启了:之前从旧版升级上来时,安装器不知道新加的
「托盘」任务,启动项会被跳过 ✗。现在改由服务每次启动对齐(安装器把开关记进注册表,
服务据此建 / 修 / 删启动项)—— 不论你从哪个版本升上来都能自愈。
🔧 修复(相对 v2.0.6.0)
- 托盘自启项改挂
HKLM:原来是HKCU,而自动升级以 SYSTEM 身份运行安装器 →
会写进 SYSTEM 的配置单元,真实用户登录时托盘不会自启。现在对每个登录用户都生效。 - 卸载后不再留孤儿图标:安装目录里找不到自己的脚本(连续两次轮询)时托盘自行退出。
✨ 新增:托盘图标 + 断线通知
- 装完会多一个通知区图标(默认随开机启动,安装向导里可取消勾选)。掉线、恢复、
服务未响应时会弹气泡提醒,不用再自己盯着网页看。 - 右键图标:打开配置页 / 立即登录 / 打开日志目录 / 退出托盘;双击图标打开配置页;
鼠标悬停看当前状态(含当前 Wi-Fi 名)。 - 通知有防刷屏:刚开机不弹;偶发一次连不上服务不弹(连续 3 次 ≈30 秒才报「服务无响应」);
同一状态不重复弹。 - 它是个独立的小程序(
tray.py,随登录会话运行)—— 服务本身跑在后台会话里,没法直接弹通知。
只用管理员权限才能在 Program Files 写日志,所以托盘自己的日志在
%LOCALAPPDATA%\DrcomAutoLogin\tray.log。 - 接口、配置结构、服务名、
AppId全未动(PATCH+1),老配置与升级路径不受影响。
安装包信息
| 项 | 值 |
|---|---|
| 应用版本 | 2.0.10.0 "Sirius" |
| 文件名 | StardustFlashLink-Setup-v2.0.10.0.exe |
| 大小 | 11898227 bytes(约 11.35 MB) |
| SHA256 | f147aadf1f8e54d3ae88d1e3eed34b38ef99722060d8e1b5de7c267072073406 |
| 构建提交 | b1b2b1e |
| 构建编号 | #67 |
| 构建时间 | 2026-09-28 |
| 系统要求 | Windows 10/11 x64(安装包已内嵌 Python,无需预装) |
安装后会自动注册系统服务、创建桌面与开始菜单快捷方式。
首次使用请通过 Web UI(http://127.0.0.1:8848)填写账号与密码。
升级本版前请注意:若你的机器上
nssm的AppExit曾被写成空值,需要管理员执行一次
nssm set DrcomAutoLogin AppExit Default Ignore;服务下次启动时也会尝试自愈。
用户机器验证步骤(装包后跑)
Get-Service DrcomAutoLogin | Select-Object Status, StartType
(Invoke-WebRequest http://127.0.0.1:8848/api/config -UseBasicParsing -TimeoutSec 10).StatusCode # 必须是 200,且不能挂住
Get-Content "D:\Program Files\DrcomAutoLogin\logs\service_stderr.log" -Tail 30
Get-Content "D:\Program Files\DrcomAutoLogin\logs\campus_login.log" -Tail 50 | Select-String -Pattern "NameError|ModuleNotFound"
Get-Content "D:\Program Files\DrcomAutoLogin\logs\upgrade.log" -Tail 20
预期:Status=Running;/api/config 立刻 200(配置页能读到值、保存立即生效);
stderr 无 ModuleNotFoundError;campus_login.log 无 NameError;
upgrade.log 不再出现「几十秒一轮的下载 → 装 → 重启」死循环。
自动升级过的话,upgrade.log 里还应看到
升级执行器结果:installer_rc=0 / service=RUNNING / health=OK(前两项是 v2.0.4.2 的退出码与
服务状态回报,health= 是 v2.0.10.0 新增的 HTTP 健康探测结论 ——
OK 表示服务真的答上了 /api/health,比 sc query 可信)。
若这里是 health=FAIL,同一份日志里还会有一行「升级看门狗:HTTP 健康检查未通过」写明原因。
校验
certutil -hashfile StardustFlashLink-Setup-v2.0.10.0.exe SHA256
本 release 是自动升级通道(非 prerelease):客户端读
/releases/latest取版本号与 assetdigest(fail-closed 校验)。
固定下载链接仍见 prereleaseinstaller。