Skip to content

v1.0.7

Choose a tag to compare

@kele551 kele551 released this 09 Oct 06:32
· 74 commits to main since this release

狐径 FoxPath v1.0.7 — 升级护栏:不会把旧版本当新版,升坏了会自动回滚

下载

文件 说明
FoxPath.exe 主程序,绿色单文件,双击即用。版本号写在 exe 属性里(鼠标悬停 / 右键-属性-详细信息)
version.json 升级信息,已装用户点「检查更新」时读取。这个附件不能少,否则老版本拿不到升级提示

这一版修的两个升级问题(都是真机上抓到的)

① 不会再把「降级」当「升级」提示

现象:本地版本比线上新时(开发/预发布版本),面板仍然显示「发现新版本 vX」,
点「立即升级」会把本地版本换成更旧的线上版本。

这一版:升级前按版本号语义比较(1.0.10 > 1.0.9 这种也算得对),三种结论各说各的:

  • 线上更高 → 「发现新版本 vX(当前 vY)」,可以升级;
  • 一样 → 「已是最新版 vX」;
  • 线上更低 → 「本地版本比线上新(线上尚未发布)」,「立即升级」按钮置灰。

服务端也加了硬闸门:任何升级入口在「远程 ≤ 本地」时直接拒绝并写日志
(拒绝降级:远程 x < 本地 y),连下载都不会发生 —— 只挡前端按钮是不够的。

② 升级之后新版起不来 —— 真因查清并修掉

现象:升级流程走完(下载、校验、覆盖都成功),但新版一次都没起来,
用户看到的是「升级之后程序没了」。

真因(对照实验钉死):升级小助手是从主程序里起的,会继承单文件 exe 的 _PYI_* 环境变量
(_PYI_PARENT_PROCESS_LEVEL / _PYI_APPLICATION_HOME_DIR / _PYI_ARCHIVE_FILE)。
新版本的引导程序一看到 _PYI_PARENT_PROCESS_LEVEL,就以为「我是子进程、已经解过包了」,
于是跳过解包、去找那个早已随旧实例退出被删掉的临时目录,直接失败
(Failed to load Python DLL)—— 应用连一行日志都没有。

修复:起新版本之前先把这些变量从环境里擦掉(主程序侧 + 小助手脚本各擦一次,双保险)。

更正一条旧结论:2026-10-08 那次同类故障当时记为「杀毒软件拦截」(实测过火绒),
真因就是上面这个,与杀毒软件无关。特此更正。

顺带补上的兜底

  • 升级「成功」的判定改成按版本号确认(新版真的起来了才算成功),不再只是「文件覆盖完了」;
  • 新版连续起不来时,小助手会把旧版本放回去并重新启动它
    (日志里能看到三步:覆盖失败 / 回滚 / 旧版已起来);
  • 升级交接过程中的启动路径不再弹模态对话框(卡住等人点「确定」会让升级看起来像死机);
  • 升级存档带上格式版本并向下兼容,新旧版本互相读对方的存档都不会报错。

本版还包含(开发中积累、随本版一起发)

  • 默认自动升级:发现新版本后不再弹确认框,静默完成;只有失败才提示一次,可在设置里关掉。
  • 升级结果气泡 + 面板回执:成功/失败都会在系统通知里弹一下;面板「版本与升级」那一栏常驻显示
    「上次升级结果(成功/失败 + 时间 + 原因)」,重启后仍在。
  • 接管 github.io / GitHub Pages 相关域名:演示页、项目主页这类静态站点也能正常打开。
  • 十余项边界与安全加固:接口同源校验、数据目录原子写、异常路径的还原与幂等、/pac 全 ASCII 等。

升级时请注意

  • 从 v1.0.6 升到 v1.0.7 这一跳用的仍然是老版小助手(不重试、不回滚),所以仍可能失败一次;
    失败了双击一下 FoxPath.exe 即可(升级本身是完成的)。
  • 从 v1.0.7 往后,升级全程带护栏:失败会自动回滚并保留一个能用的版本。
  • 程序退出前会还原系统代理,所以升级过程中不影响上网。

已知边界(照旧)

  • 运营商如果按 SNI 掐断(TLS 握手里能看到域名),本地代理帮不上忙 —— 只能换网络或换方案。
  • raw / 发布附件的专属池在部分线路上时通时不通,体检会如实反映,不会假装成功。
  • 只代理 GitHub 相关域名;不改 hosts、不改系统 DNS,退出时还原系统设置。
  • 控制面板只监听 127.0.0.1,接口已做 Host/Origin 同源校验(挡网页 CSRF 与 DNS rebinding)。

版本历史(近几版)

版本 日期 说明
v1.0.7 2026-10-09 升级护栏:拒绝降级、升级失败自动回滚、修掉「升级后新版起不来」的真因(_PYI_* 继承,同时更正此前「杀毒软件拦截」的误判);默认自动升级 + 升级结果气泡与面板回执;接管 github.io(本次对外发布,Gitee 与 GitHub 同步)
v1.0.6 2026-10-08 联通/移动友好:候选池扩到官方全量、IP 表三源依次试、raw 文件与发布附件也能加速(回应 issue #1)、面板线路体检与手动指定 IP
v1.0.5 2026-09-22 网页版在线升级:检查更新 / 立即升级 / 进度条,下载校验 SHA256 后由独立小助手接管覆盖重启
v1.0.1 2026-09-22 修「还原不了系统代理」一类缺陷;Fix-GitHub.ps1 补 UTF-8 BOM(此前无法运行)
v1.0.0 2026-09-19 首个版本:本地代理 + PAC、每 5 分钟 IP 体检、候选池自动刷新、全灭自愈、退出还原

反馈:GitHub Issues · Gitee Issues


维护约定(发版的人看):这份文件的首行版本号就是当前线上版本。发新版前把它整篇换成新版本的说明
(或改用 --notes <文件>);tools/publish.py 不带 --notes 时会读这份文件,并校验首行版本号与
要发的版本一致,不一致直接中止 —— 免得发行页挂着上一版的文案。