Skip to content

应用在部分未打齐最新累积补丁的 Windows 10 设备上双击后完全没有反应,且无任何 UI 报错弹窗。 #271

Description

@PANDAJSR

检查清单

  • 我已更新到最新版,确认这一 Bug 还没有修复。我也已在 GitHub Issues 中检索,确认这一 Bug 未被提交过。
  • 我已经仔细阅读过选项里的内容,并且知道这个选项不用勾选。
  • 我已知晓并同意,此处仅用于汇报程序中存在的问题(关于其他非程序本身的问题应当在 Discussion 板块提出)。

期望的行为

应用最新版可以在部分未打齐最新累积补丁的 Windows 10 设备上正常运行

实际结果

该问题与 InkCanvasForClass/community#648 类似,其均为 .NET 10 的版本的程序在我们班出现的问题

问题现象

应用在部分未打齐最新累积补丁的 Windows 10 设备(常见于内网机房、旧版系统、教学大屏等)上双击后完全没有反应,启动即发生静默致命崩溃(Process Exit),且无任何 UI 报错弹窗。

根本原因

编译机制默认开启 CET:高版本 .NET(.NET 9 / .NET 10)在编译/打包时默认启用了硬件影子栈兼容性标记(Control-flow Enforcement Technology,即 /CETCOMPAT)。
旧版 Win10 存在系统级缺陷:旧版本 Windows 10 内核(如 ntdll.dll 低于 10.0.19041.5007)在解析该 PE 头的 CET 标志时存在兼容性 Bug,导致进程初始化阶段直接被系统终止。
推荐解决方案(开发端修复)

在主程序(以及所有独立宿主/子进程程序,如 .LiquidGlassMagHost)的 .csproj 文件中显式关闭 CET 兼容性,重新编译打包即可:

<PropertyGroup>
  <!-- 显式禁用 CETCompat,解决旧版 Win10 上的启动崩溃 -->
  <CetCompat>false</CetCompat>
</PropertyGroup>

重现步骤

要复现此问题,需要满足“支持 CET 的现代硬件”与“未打齐 2024 年 10 月安全补丁的 Windows 10 系统”两个核心条件。

复现所需环境

硬件要求:必须在支持 Intel Tiger Lake(第 11 代 Core 及以上)或 AMD Zen 3(Ryzen 5000 及以上)的真机(或开启了 CPU 虚拟化传递的虚拟机)上测试。旧 CPU 不具备硬件影子栈,无法触发此底层指令校验。

系统环境:安装未更新至最新补丁的 Windows 10(如 21H2 / 22H2 原始 ISO,确保 ntdll.dll 版本低于 10.0.19041.5007,即未安装 KB5044273 补丁)。

开发环境:.NET 9 或 .NET 10 SDK。

Gemini 说的,我并未实际尝试复现()

截图/录屏(可选,建议)

真实教室环境截图(别问我为啥在大屏上用CC,问就是新班主任不管):

Image

诊断信息

无stdout/err,无日志

最后一步

  • 我认为上述的描述已经足以详细,以允许开发人员能复现该问题。如果我的 issue 没有按照上述的要求填写,可能会被无条件关闭。

Metadata

Metadata

Labels

Bug程序没有正常工作未读开发者没看过此issue

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions