Skip to content

fix(windows): embed icon in portable launcher stubs and make shortcut writes idempotent (#438) - #440

Merged
Wangnov merged 1 commit into
mainfrom
fix/438-launcher-icon
Oct 10, 2026
Merged

Wangnov merged 1 commit into
mainfrom
fix/438-launcher-icon

Conversation

@Wangnov

@Wangnov Wangnov commented Oct 10, 2026

Copy link
Copy Markdown
Owner

Fixes #438

根因

0.5.12 起便携版使用新布局:官方文件在 app\ 下,根目录是 Manager 生成的启动器存根(Codex.exe / ChatGPT.exe / LaunchCodex.exe)。这个存根由裸 rustc 编译,没有任何图标资源;Windows 固定任务栏、或指向存根的快捷方式会显示成空白(白色)图标。另外 Manager 每次启动都会无条件重写 Codex.lnk,手动修复会被覆盖。

改动

  • 存根嵌入图标:新增 assets/launcher.rc 与 assets/launcher.ico;build.rs 在 Windows 目标上编译资源(MSVC 用 rc.exe 产出 .res,GNU 用 windres 产出 COFF 对象),通过 -C link-arg 链接进存根,并加上 rerun-if-changed。.camlnch 段与启动逻辑不变。
  • 快捷方式图标回落顺序(portable.rs):app\resources\icon-chatgpt.ico(存在才用)→ app\ChatGPT.exe → 启动器存根,不再回落到 Manager。
  • 幂等写入(portable_shortcut.rs):新增 ShortcutSpec / read_spec / ensure / ensure_icon。先读再比较(路径用 same_windows_path,参数、图标索引、AUMID 精确比较),一致则不写盘。create_manager_launch_shortcut 改用 ensure;create_start_menu_shortcut 对已有的 Manager 链接只修图标,保留用户参数。

测试

  • 新增:ensure 幂等且不改写文件;ensure_icon 只改图标、保留用户参数;图标选择顺序(含嵌套布局指向 app\ChatGPT.exe);存根含 RT_ICON / RT_GROUP_ICON(并入现有 launcher 往返测试)。
  • Linux:cargo test -p codex-win-engine --lib 114 通过。
  • cargo check -p codex-win-engine --tests --target x86_64-pc-windows-gnu(mingw + windres)通过,且 build 脚本实际产出的存根 .rsrc 含图标资源。

未验证

  • Windows 专属测试(COM 快捷方式、PE 资源、assert_launcher_has_no_vc_runtime_import)只做了交叉编译检查,未在 Windows 上运行,依赖 CI。
  • MSVC 路径(rc.exe)未在本地跑过,依赖 Windows CI。
  • 真机冒烟(升级 → 固定任务栏 → 重启 Manager 后图标不变)未做。
  • 仓库内没有 Codex/ChatGPT 官方图标,launcher.ico 暂用 src-tauri/icons/icon.ico(Manager 图标);如需官方图标请替换该文件。
  • 未运行 cargo fmt / clippy(box 上未装组件)。

@Wangnov
Wangnov merged commit 9994e98 into main Oct 10, 2026
14 checks passed
@Wangnov
Wangnov deleted the fix/438-launcher-icon branch October 10, 2026 12:18
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.

chatgpt图标没了

1 participant