Delphi 10.4.2程序间歇性图标黑底:comctl32.dll双版本加载问题
Delphi 10.4.2 32位Windows 11应用间歇性黑底图标与comctl32.dll双版本加载问题
问题现象
- 32位VCL应用在Windows 11上间歇性出现图标黑底(丢失透明效果),每日发作数次,无法稳定复现
- 触发问题后立即重启程序可恢复,但需间隔30-60分钟重启才会再次出现该问题
- 异常状态下调用
TImageList.Assign()会抛出Failed to write ImageList data to stream异常,代码示例:
var imgList1 := TImageList.Create(nil); imgList1.Assign(imgList2);
排查情况
- 问题发作时,通过Process Explorer观察到程序同时加载了comctl32.dll的5.*和6.*版本;正常运行时仅加载6.*版本
- 空VCL窗体应用的Dependency Viewer依赖树中虽显示同时依赖两个版本,但实际运行时仅加载6.*,无异常
- 尝试添加显式应用清单,效果与Delphi自动生成的清单一致,未解决问题
- 多个代码关联度较低的应用均出现此问题,且自上次无异常版本以来,未发现明显问题代码提交
临时 workaround(效果不可靠)
- 启动时调用
TImageList.Assign()进行问题检测 - 检测到comctl32.dll双版本加载时自动静默重启程序
核心疑问
该问题的根本成因是什么?
内容的提问来源于stack exchange,提问作者Phil B
相关产品推荐
相关产品推荐

