Skip to content

Remote Controls V2.3.7

Choose a tag to compare

@github-actions github-actions released this 09 Nov 09:51
· 221 commits to main since this release

🚀 自动构建发布 - 2025-11-09 09:51 UTC

🔄 更新内容

托盘在“任务计划 + 最高权限”场景下的通知稳定性修复
Full Changelog (相对于 2.3.6): V2.3.6...V2.3.7

🐛 关键问题修复

  • 修复在“任务计划程序以最高权限运行”场景下,托盘在点击菜单(例如“打开配置界面”“托盘状态”等)触发通知时偶发崩溃并弹出“Error launching CrashSender.exe”的问题。
    • 根因:win11toast 依赖的 WinRT 调用在提升会话中由 winsdk\_winrt.pyd 原生层崩溃(0xC0000005),Python 无法捕获,最终由 PyInstaller 试图拉起 CrashSender 导致提示。
    • 事件验证:事件查看器显示 Faulting module 指向 winsdk\_winrt.pyd,异常码 0xC0000005,与现场一致。

🔧 解决方案与实现

  • 新增“模拟桌面用户令牌(Impersonation)”机制:
    • 在托盘为管理员权限时,通知线程临时模拟当前登录桌面的 explorer.exe 用户令牌,再调用 WinRT 发送 toast,调用完成即恢复线程令牌。
    • 该机制对普通权限运行无影响,仅在提升会话时启用。
  • 新增通知熔断保护:
    • 一旦首次通知调用失败(包括 WinRT 初始化失败等),自动禁用本进程后续 toast,改为日志/MessageBox 回退,确保不再被原生崩溃拖垮。

🗂 变更范围

  • tray.py
    • 新增 _impersonate_shell_user() 辅助方法(基于 DuplicateTokenEx + SetThreadToken)。
    • notify() 统一通过模拟令牌发送 toast,并内置失败熔断与降级路径。

✅ 兼容性与用户影响

  • 无需修改任何配置;保留系统通知体验,即便托盘由“任务计划 + 最高权限”启动也不会崩溃。
  • 普通权限下行为不变。

🔎 建议验证

  • 在任务计划程序勾选“使用最高权限运行”,设置登录后触发/开机触发,启动托盘后:
    • 依次点击“托盘状态”“打开配置界面”等,toast 能正常显示,托盘不退出。
    • 如个别环境仍有第一次 toast 失败,后续应用将自动熔断到安全回退,不再崩溃。

📚 相关链接