Skip to content

Improve Windows hosts update reliability and add desktop recovery flow#3

Merged
fjh1997 merged 5 commits intofjh1997:mainfrom
final00000000:feat/windows-hosts-compat-backup-restore
Mar 25, 2026
Merged

Improve Windows hosts update reliability and add desktop recovery flow#3
fjh1997 merged 5 commits intofjh1997:mainfrom
final00000000:feat/windows-hosts-compat-backup-restore

Conversation

@final00000000
Copy link
Copy Markdown
Contributor

@final00000000 final00000000 commented Mar 25, 2026

Addresses #1

背景

  • 这次不是只补充报错文案,而是顺着 issue Windows 10 开始加速 报错 #1 继续往下排查了 Windows 端的真实失败链路。
  • 实际抓到的底层错误是 hosts 文件在提权流程里被其他进程短暂占用,导致原子替换失败(os error 32 / sharing violation)。
  • 同时也补了恢复链路,避免用户在失败后只能手改系统文件。

这次改了什么

  • 为桌面端新增完整的 hosts 基线备份 / restore-hosts / cleanup 流程
  • Windows 写入 hosts 时处理只读属性,并为原子替换增加共享冲突重试
  • cleanup 在备份缺失、损坏或状态异常时会自动退化为清理托管 block,并重置失效备份,避免后续一直卡死
  • GUI 新增“恢复 hosts”和“彻底恢复原始状态”按钮,以及确认弹窗
  • GUI 增加备份状态展示、最近操作日志展示,并修正主要操作按钮的可读性
  • 运行时新增 operations.log,便于继续定位 Windows 机器上的现场问题

为什么这样改

issue #1 表面上看到的是:

  • elevation or command execution failed
  • elevated command exited with code 1

但继续往下看,真实问题并不一定是“没拿到管理员权限”,还有一类情况是:

  • 管理员提权已经成功
  • 但是 C:\Windows\System32\drivers\etc\hosts 在替换瞬间被别的进程占用
  • 最终表现成提权后的命令失败

所以这次除了提升 Windows 写入兼容性,也把“备份 -> 恢复 -> 彻底清理 -> 再次尝试”的闭环补齐了。

当前验证

cargo test --release --locked --lib --target-dir target/pr-verify
cargo build --release --locked --bin linuxdo-accelerator --target-dir target/pr-verify

本地验证结果:

  • 11 tests passed
  • release build passed

目前已经完成代码与本地构建验证,但还缺少 Windows 实机闭环证据,因此这里用的是 improve / reliability 语义,而不是直接宣称已经完全复现并彻底修复所有 Windows 场景。

@final00000000 final00000000 changed the title Fix Windows hosts update failures and add desktop recovery flow Improve Windows hosts update reliability and add desktop recovery flow Mar 25, 2026
@fjh1997
Copy link
Copy Markdown
Owner

fjh1997 commented Mar 25, 2026

Reopening to trigger CI after adding PR workflow on main.

@fjh1997 fjh1997 closed this Mar 25, 2026
@fjh1997 fjh1997 reopened this Mar 25, 2026
@fjh1997
Copy link
Copy Markdown
Owner

fjh1997 commented Mar 25, 2026

感谢这个 PR,方向是对的,尤其是 Windows hosts 写入重试、备份元数据和恢复入口这块,补得很扎实。

我这边看完后,顺手直接往你的分支补了一次修正,提交是 591fe0d (Fix hosts restore semantics and cleanup fallback)。主要处理了 3 个会影响合并的点:

  • 首次生成 hosts.backup 时,会先去掉已有的 linuxdo-accelerator managed block,再保存基线备份,避免老用户升级后把旧规则一起备份进去,导致 restore-hosts / cleanup 不能真正回到接管前状态。
  • helper-stop / cleanup 遇到守护进程 5 秒内没完全退出时,不再直接短路整个清理流程,而是记录问题后继续做 hosts / loopback / cert 清理,保持 best-effort 恢复语义。
  • GUI 的备份状态从“只看文件是否存在”改成“存在且可验证”,损坏的备份现在会显示成异常状态,不会继续给出误导性的“已检测到备份”。

本地我补跑了你 PR 里同样的校验:

  • cargo test --release --locked --lib --target-dir /tmp/linuxdo-pr3-target
  • cargo build --release --locked --bin linuxdo-accelerator --target-dir /tmp/linuxdo-pr3-target

结果都通过了。你看下这版修正是否符合你原本想要的行为,如果没问题我这边就按这个方向继续审。

@fjh1997 fjh1997 merged commit 393465d into fjh1997:main Mar 25, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants