Skip to content

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 04 Sep 13:06

修复

  • 内嵌 Web GUI 白屏 + 所有窗口无法关闭(需任务管理器强杀)——主线程死锁
    • 根因:create_web_gui_window 命令在 async 运行时线程执行同步 fn,内部
      run_on_main_thread(建窗) + std::sync::mpsc::recv() 阻塞等待主线程建窗结果
      当主线程正被 WebView2 的同步窗口消息占用(内嵌 dsh UI 页面加载/交互时常见,
      Windows 窗口消息模型下主线程处理 WebView 消息期间不会让出给 run_on_main_thread
      排队的闭包)→ 主线程与等待它的命令线程交叉死锁 → 内嵌窗口停在白屏、主窗口
      及所有窗口事件循环卡死、无法关闭。
    • 修复:命令改为 async fn,把建窗调度到主线程后立即返回(fire-and-forget),
      不跨线程阻塞等待
      ;窗口创建仍在主线程完成(Tauri 要求),创建失败由内部日志
      记录。前端不再依赖返回的窗口 label(图标在创建时已同步设置)。
  • 移除 create_web_gui_window 返回 label 的契约(前端 lib/tauri.ts createWebGuiWindow
    签名不变,仅不再消费返回值)。
  • 内嵌窗口偶发创建失败("the underlying handle is not available")apply_window_icon
    在 build() 后立即取 hwnd 的竞态失败不再阻断窗口创建(恢复 0.4.14 语义:失败仅记警告,
    窗口照常打开)。此前 ? 传播会把已建成的窗口整体判失败 → 不开窗。
  • 日志全域化(不允许丢失任何日志)
    • 新增全局 panic hook:任何线程 panic 落盘 logs/crash.log + 经 Logger 记录
      (release 无控制台时 panic 此前完全不可见 → 静默崩溃无痕)。
    • 关键路径 eprintln!(主窗口图标失败、外链打开失败、Tauri 启动失败)改经 Logger
      落盘,release 下不再丢失。
    • dsh stdout/stderr 已实时落盘 dsh-web-stdout/stderr.log 并逐行进日志流;崩溃
      尾部不完整行有 flush 兜底,保证 dsh 侧日志不丢。