﻿Windows 11 实时字幕保存器 v12（增强诊断 + 可解释修复）

目标：
- 正常电脑：仍然只需要双击 Run.cmd，自动打开实时字幕、记录、自动分段，Ctrl+C 保存并关闭。
- 异常电脑：不再只显示“找不到字幕”，而是尽量自动收集证据，把问题定位到具体层级。
- 只有捕获到真实字幕后才创建 transcript/raw；正常无文字不会留下空 txt。

====================
v12 新增的增强诊断
====================

1. Windows 层
- Windows 版本 / DisplayVersion / Build。
- 是否达到 Windows 11 22H2 / Build 22621 的最低要求。
- 系统架构。
- 是否存在“待重启”信号（CBS、Windows Update、PendingFileRenameOperations）。

2. LiveCaptions 组件层
- C:\Windows\System32\LiveCaptions.exe 是否存在。
- 文件版本、文件大小。
- Authenticode 签名状态（只把 HashMismatch / NotTrusted / UnknownError 等强异常信号当作完整性问题；NotSigned 本身不会直接判坏）。
- 开始菜单是否存在实时字幕入口。

3. 进程 / 窗口 / UI Automation 层
- LiveCaptions 进程是否启动、进程 ID。
- 是否形成实时字幕顶层窗口。
- 不再只依赖 LiveCaptionsDesktopWindow；同时按进程和 UI Automation 自适应寻找。
- 检测 CaptionsTextBlock / ReadyToCaptionTextBlock。
- 能区分：已经就绪、首次设置、语言下载错误、窗口存在但 UI 结构异常。

4. 语言 / Speech / Store 层
- 当前 UI 语言与用户语言列表。
- 枚举可读取到的 Language.Speech Windows Capability（这是辅助证据，不把它当作 Live Captions 是否可用的唯一判断）。
- 枚举当前用户可见的 Speech 相关 Appx/MSIX 包。
- Microsoft Store、App Installer 是否存在。
- 检查常见 Microsoft Store 策略限制信号。
- 检查 InstallService、BITS、Windows Update、Windows Audio、Audio Endpoint Builder 等相关服务状态。

5. 网络辅助信号
- 以 TCP 443 方式测试：
  - www.microsoft.com
  - download.microsoft.com
  - apps.microsoft.com
- 这些只是网络辅助证据，不会因为单次连接失败就直接断言根因。

6. Windows 事件日志
- Application：LiveCaptions.exe / LiveCaptionsBackendDll 相关崩溃。
- Code Integrity / AppLocker：是否存在 LiveCaptions 被安全策略拦截的证据。
- AppXDeploymentServer / AppModel-Runtime：Speech / 语言资源包安装相关错误或警告。

====================
诊断分类示例
====================

v12 会给“分类 + 置信度 + 原因”，而不是硬猜唯一根因。可能出现：

- Healthy
  实时字幕组件、进程和可识别 UI 正常。

- UnsupportedOS
  系统版本低于 Windows 11 22H2 / Build 22621。

- ComponentMissing
  系统版本支持，但 LiveCaptions.exe 和开始菜单入口都缺失。

- ComponentIntegrityProblem
  LiveCaptions.exe 的签名检查出现 HashMismatch / NotTrusted / UnknownError 等强异常信号。

- CrashOrComponentError
  Windows Application 日志有 LiveCaptions/相关 DLL 崩溃证据。

- SecurityPolicyBlocked
  Code Integrity / AppLocker 出现对 LiveCaptions 的拦截证据。

- LanguageDownloadError
  实时字幕窗口明确显示“无法下载所需语言文件”一类错误，同时结合 Store、策略和网络信号继续缩小原因。

- SpeechPackageInstallError
  AppX / AppModel 日志出现 Speech/语言资源包安装错误。

- FirstRunSetup
  实时字幕已经打开，但仍处于首次设置/语言资源安装阶段。

- ProcessWithoutWindow
  LiveCaptions 进程存在，但没有形成可用窗口。

- UIUnexpected
  顶层窗口存在，但 UI Automation 结构与已知结构不同。

- PendingRebootPossible
  当前故障同时伴随明确待重启状态，应先完成重启再复检。

- LaunchFailed
  以上证据都不足时，只定位到“Windows 实时字幕启动链路异常”，不会编造更细根因。

====================
自动修复策略
====================

v12 不会见到任何错误就一律跑 DISM/SFC，而是先判断“这种问题是否适合系统文件修复”。

通常会询问是否自动修复：
- ComponentMissing
- ComponentIntegrityProblem
- CrashOrComponentError
- ProcessWithoutWindow（作为排除性修复）
- 无明确根因的 LaunchFailed

通常不会盲目执行 DISM/SFC：
- UnsupportedOS：需要 Windows 升级，DISM/SFC 不能代替升级。
- LanguageDownloadError：优先是语言文件 / Store / 网络 / 策略链路。
- SpeechPackageInstallError：优先是语言资源包 / AppX 安装链路。
- FirstRunSetup：需要完成首次设置。
- SecurityPolicyBlocked：DISM/SFC 不会绕过企业安全策略。
- UIUnexpected：更像 UI Automation / Windows 构建结构差异。
- PendingRebootPossible：优先完成重启。

如果适合修复，会询问：
“是否尝试自动修复？[Y/N]”

选择 Y 后才弹 UAC，并运行：
1. DISM /Online /Cleanup-Image /CheckHealth
2. DISM /Online /Cleanup-Image /ScanHealth
3. DISM /Online /Cleanup-Image /RestoreHealth
4. SFC /scannow

不会：
- 自动重装 Windows
- 自动升级 Windows
- 删除个人文件
- 静默修改企业安全策略
- 绕过 AppLocker / Code Integrity

====================
修复后的解释
====================

修复结束后 v12 会自动再次启动并诊断实时字幕。

如果恢复：
- 告诉你修复前诊断是什么。
- CheckHealth / ScanHealth 检测到了什么。
- RestoreHealth 是否完成。
- SFC 是否明确修复了损坏文件。
- 是否出现待重启信号。
- 修复后实时字幕状态。
- 只有证据足够时才说“哪一步起效”；证据不足时明确写无法单独归因。

如果没有恢复：
- DISM 修复源缺失 / 下载失败：明确指出修复链路没有完成。
- SFC 仍有无法修复文件：明确指出系统仍不完整。
- 修复后仍崩溃：附最近 Windows 事件日志证据。
- 修复后仍被安全策略拦截：明确指出是策略层，不是继续 DISM/SFC 能解决。
- 修复后变成语言下载/语言包错误：转而指出 Store / 网络 / Speech 安装链路。
- 修复后存在待重启：明确说明当前不能判定最终失败，先重启再运行 v12 复检。
- 证据仍不足：只定位到可证明的层级，不乱猜某个 DLL 或设置。

修复完整输出与最终报告保存在：
LiveCaptionRecords\logs\repair\时间.txt

====================
日常记录目录
====================

LiveCaptionRecords
├─ transcripts
│  └─ 2026-08-25_19-30-00.txt       ← 唯一日常回看的自动分段成品
└─ logs
   └─ raw
      └─ 2026-08-25_19-30-00.txt    ← 7 天短期恢复底稿

只有故障时才出现：
logs\diagnostic\时间.txt

只有用户同意系统修复时才出现：
logs\repair\时间.txt

raw：
- 每次启动 Run.cmd 时删除 LastWriteTime 超过 7×24 小时的 raw。
- transcripts 不参与 7 天清理。
- 不是后台定时器；如果很久没运行，会在下一次启动时清理。

====================
自动分段与旧 raw 重建
====================

自动分段：
- 不调用 AI、不改写识别文字。
- 优先句号、问号、感叹号。
- 标点稀少时在长段落附近寻找逗号、分号、冒号。
- 极端情况下才按长度兜底。

旧 raw 重建：
- 把旧 raw_changes_*.txt 或新版 logs\raw\时间.txt 拖到 RebuildOldRaw.cmd。
- 重建结果放到 LiveCaptionRecords\recovered。

====================
边界
====================

v12 的目标是“尽可能自动收集证据并缩小原因”，不是承诺覆盖世界上所有 Windows 魔改、企业策略或第三方安全软件组合。
当证据不足时，程序会明确告诉用户“目前能定位到哪一层、还缺什么证据”，而不是伪造一个确定答案。
