Skip to content

fix(icon): persist application icons with complete fallback regressions - #171

Merged
SoftBlack42 merged 5 commits into
mainfrom
codex/pr142-icon-cache
Sep 26, 2026
Merged

SoftBlack42 merged 5 commits into
mainfrom
codex/pr142-icon-cache

Conversation

@SoftBlack42

@SoftBlack42 SoftBlack42 commented Sep 26, 2026 •

Copy link
Copy Markdown
Collaborator

概要与背景


变更内容与补强设计

  1. 有效 Shell/PIDL 快捷方式支持与红绿修复:

    • 修复了有效 Shell/PIDL 虚拟快捷方式(例如回收站 ::{645FF040-5081-101B-9F08-00AA002F954E})因无标准 Win32 物理文件路径而被误判为失效快捷方式的问题;
    • 仅当快捷方式目标明确具备文件系统特征(绝对路径、路径分隔符或 .exe 后缀)且物理目标不存在时,才判定为失效;
    • 严格保留“明确失效的文件目标绝不覆盖已有有效快照”的防护逻辑。
  2. 测试工程输出目录隔离:

    • 在 scratch/Directory.Build.props 中为 test_icon_cache 与 test_onboarding 两个工程限定独立的 BaseIntermediateOutputPath 与 BaseOutputPath;
    • 彻底避免双方共用 apphost.exe 导致的覆盖与相互干扰,其他 scratch 工具工程(Issue17Demo、IconGenerator)保持默认输出布局不变。
  3. 跨独立 OS 进程冷启动验证:

    • 增加独立子进程验证:子进程 1(--subproc-pin)生成物理快照;父进程物理删除源文件;子进程 2(--subproc-read,全新独立冷启动进程,内存缓存完全干净)成功从持久化快照恢复图标,断言有效尺寸且处于 Frozen 状态。
  4. 全量配置动作入口真实样本覆盖:

    • 使用 10 个真实临时样本文件,覆盖配置树中的 10 个动作入口(一级扇区、二级级联扇区、中心动作、多层轮盘扇区与中心、独立 Profile 动作、取消动作、手势动作),验证 PinIconsForConfig 落盘快照、源文件删除后全部 10 个入口均能从快照恢复。
  5. 插件 SVG 图标动态注册与解析验证:

    • 实际调用 PluginHost.Catalog.BeginSession 注册插件矢量 SVG 图标并提交;
    • 断言 IconHelper.GetSvgPathByKey 解析结果与注册值完全一致,且撤销后正确清除。
  6. 保留原有边界回归:

    • 保留目标失效但 .lnk 仍在时的哈希防覆盖与快照回退;
    • 保留损坏快照自愈测试;
    • 保留只读/不可写目录容错测试。

验证记录

  • 验证 HEAD:eb33c37807ebc2e170656600b4d314db03dd9a86(已干净合并最新 main c90cfb5)
  • 构建结果:dotnet build WinPieGestures/WinPieGestures.csproj -c Release --nologo -> 0 错误,0 警告
  • 代码格式:git diff --check origin/main...HEAD -> 通过,无格式与换行问题
  • 自动化回归:scratch/test_icon_cache.ps1 在独立临时沙箱中运行 -> 66 / 66 项全部 PASS
  • 双向构建顺序测试:
    • “onboarding → icon”构建后运行图标回归:66 / 66 PASS
    • “icon → onboarding”构建后运行新手引导回归:148 / 148 PASS
    • 经二进制检查,两工程 apphost 各自绑定自身 dll,未发生混淆。
  • 人工验证:用户已在独立 LOCALAPPDATA 沙箱完成人工验收;人工启动命令未单独重定向 APPDATA。自动化回归脚本另行隔离 LOCALAPPDATA、APPDATA、TEMP 和 TMP。

交付声明

Sleepython and others added 5 commits September 25, 2026 21:10
…and strengthen regressions

- Fix valid Shell/PIDL virtual shortcuts (e.g. Recycle Bin) falsely identified as broken shortcuts by only treating shortcuts with non-existent rooted/file targets as broken
- Preserve protection ensuring clearly invalid file targets do not overwrite existing valid snapshots
- Isolate test projects build outputs via scratch/Directory.Build.props to eliminate apphost collisions between test_icon_cache and test_onboarding
- Add cross-process cold boot snapshot verification across two independent OS processes
- Add full action entity coverage using real temporary sample executables for PinIconsForConfig
- Add dynamic plugin SVG registration, resolution, and revocation verification via PluginHost.Catalog
…ojects

Scope BaseIntermediateOutputPath and BaseOutputPath overrides specifically to test_icon_cache and test_onboarding so other scratch utilities retain their default build layouts.
@SoftBlack42
SoftBlack42 merged commit 3d94be4 into main Sep 26, 2026
1 check passed
@ztzpro
ztzpro deleted the codex/pr142-icon-cache branch September 27, 2026 20:33
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