PowerToys 崩溃分诊指南:用 Watson 查询按 Catch-all、EXE 与 DLL 三个维度定位故障

发布时间:2026/9/7 23:31:57
PowerToys 崩溃分诊指南:用 Watson 查询按 Catch-all、EXE 与 DLL 三个维度定位故障 PowerToys 崩溃分诊指南用 Watson 查询按 Catch-all、EXE 与 DLL 三个维度定位故障【免费下载链接】PowerToysMicrosoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys本文基于 PowerToys 仓库内部分诊手册 watson-queries.md讲解如何在 Microsoft 内部 Watson 崩溃分析门户中围绕 PowerToys 的发布版本构造三类查询——全量兜底查询Catch all、按可执行文件名查询EXE name、按模块 DLL 名查询DLL based。读完后你能独立完成一次崩溃分诊给定一个版本号快速拉出该版本所有相关崩溃、区分安装器/主程序/Run 启动器的进程归属并将故障收敛到具体的功能模块 DLL。1. Watson 在 PowerToys 崩溃诊断体系中的位置PowerToys 项目文档 logging.md 将项目的日志机制归纳为四类其中第 4 类正是 WatsonWatson reports (crash reports sent to Microsoft)也就是说Watson 是独立于本地文本日志、ETW 遥测和 Event Viewer 之外的崩溃报告通道由崩溃发生时自动产生并上报到 Microsoft 内部系统。这与本地%LOCALAPPDATA%\Microsoft\PowerToys\Logs下的应用日志互补本地日志用于分析用户现场Watson 则用于聚合全量用户的崩溃数据、按进程与模块维度分诊。doc/devdocs/watson-queries.md 的标题明确标注为[msft only]——这是一份仅面向 Microsoft 内部成员的分诊速查表其中的查询模板指向watsonportal.microsoft.com门户外部访问者无法打开这些页面但查询的构造方式查询端点、参数命名、过滤条件本身就是可学习的方法论。项目贡献指南 guidelines.md 中也提到 Bug fixes related to Watson errors sometimes dont have corresponding issue links说明 Watson 驱动的修复经常不挂在公开 Issue 上而是直接从崩溃数据出发立项这凸显了掌握分诊查询的价值。2. Catch all按版本做全量崩溃兜底查询手册第一类查询是 Catch all全量兜底使用门户的CabSearch端点https://watsonportal.microsoft.com/CabSearch?DateTimeFormatUTCMaxRows1000AppScope_AppVersion0.100.2.0Process*powertoys*各参数含义可以从 URL 结构直接读出参数取值示例作用端点CabSearch崩溃转储cab全量检索DateTimeFormatUTC统一以 UTC 时间展示避免时区干扰MaxRows1000单次最多返回 1000 行适合分诊期拉全量AppScope_AppVersion0.100.2.0锁定到具体发布版本注意带 4 段版本号Process*powertoys*通配匹配所有名称包含 powertoys 的进程这条查询的特点是不区分具体进程Process*powertoys*会同时覆盖PowerToys.exe、PowerToys.PowerLauncher.exe、安装器以及以 powertoys 命名的其他进程。分诊启动阶段用它确认这个版本到底有没有成规模的崩溃。手册中的原样提示分诊时必须把AppScope_AppVersion以及下文各安装器文件名更新为当前发布版本。关于版本取值有一个重要的仓库内佐证文档中示例使用的是0.100.2而当前main分支的 src/Version.props 显示Version0.0.1/Version VersionChannelprivate/VersionChannel !-- Update once when main moves to the next stable release train. -- ReleaseTrainVersion0.101/ReleaseTrainVersionVersion字段是构建时填充的占位值真正反映发布列车的是ReleaseTrainVersion当前为0.101。因此分诊 0.100.x 系列崩溃时沿用文档中的0.100.2.0而分诊更新版本时应按发布管线实际产出的版本号替换不能假设文档中的快照值长期有效。3. EXE name按可执行文件名查询各进程第二类查询用于按具体 EXE 归属查看崩溃使用Application端点统一参数为DateRangeLast 14 DaysMaxRows100。手册列出了六条查询覆盖 PowerToys 的三个进程类别3.1 安装器4 条按架构与安装级别区分# Machine installer (x64) ?DateRangeLast%2014%20DaysMaxRows100AppScope_AppNamePowerToysSetup-0.100.2-x64.exe # Machine installer (arm64) ?DateRangeLast%2014%20DaysMaxRows100AppScope_AppNamePowerToysSetup-0.100.2-arm64.exe # User installer (x64) ?DateRangeLast%2014%20DaysMaxRows100AppScope_AppNamePowerToysUserSetup-0.100.2-x64.exe # User installer (arm64) ?DateRangeLast%2014%20DaysMaxRows100AppScope_AppNamePowerToysUserSetup-0.100.2-arm64.exe安装器命名遵循PowerToys{User}Setup-{version}-{arch}.exe的规则PowerToysSetup是机器级machine安装器PowerToysUserSetup是用户级安装器后缀区分 x64 与 arm64 两种架构。这与仓库的安装工程一致installer/PowerToysSetupVNext/PowerToysInstallerVNext.wixproj 与 PowerToysBootstrapperVNext.wixproj 即为 VNext 安装器的构建工程。安装器崩溃通常指向 WiX 安装阶段问题与运行时崩溃的排查路径完全不同所以手册把它单列成 4 条独立查询。3.2 主进程与 PT Run2 条# Main exe ?DateRangeLast%2014%20DaysMaxRows100AppScope_AppVersion0.100.2AppScope_AppNamePowerToys.exe # PT Run / example ?DateRangeLast%2014%20DaysMaxRows100AppScope_AppVersion0.100.2AppScope_AppNamePowerToys.PowerLauncher.exePowerToys.exe是宿主主程序其工程位于 src/runner可执行文件清单可见 src/runner/PowerToys.exe.manifestPowerToys.PowerLauncher.exe是 PT Run 启动器的独立进程工程位于 src/modules/launcher。手册中特意标注 / example因为 PT Run 是独立 exe 的典型代表——PowerToys 的很多功能以独立可执行文件形式从主进程派生崩溃分诊时需要逐个进程定位。这两条与 3.1 的差异在于多带了一个AppScope_AppVersion参数即进程名 版本号双重过滤而安装器查询只按文件名过滤文件名本身已含版本。4. DLL based按模块名查询宿主进程内的故障第三类查询针对以 DLL 形式被加载的功能模块使用Failure/ModuleSearch端点?AppScope_AppVersion0.100.2.0FailureSearchText模块DLL名手册列出的五个模块查询及对应仓库源码位置查询项FailureSearchText对应模块源码KBMkeyboardmanager.dllsrc/modules/keyboardmanagerPower Previewpowerpreview.dllsrc/modules/previewpaneSVG ThumbnailSvgThumbnailProvider.dll预览/缩略图提供程序工程组见 src/modules/previewpaneSVG Preview PaneSvgPreviewHandler.dll同上Markdown Preview PaneMarkdownPreviewHandler.dll同上按 DLL 而非 EXE 查询有其结构性原因。从 logging.md 对低权限日志的说明可以看到Some components (like preview handlers and thumbnail providers) are started by Explorer and have low privileges——预览处理器和缩略图提供程序运行在资源管理器进程中、以低权限启动其崩溃的进程名是explorer.exe而非任何 powertoys 前缀的进程Catch all 里的Process*powertoys*通配根本匹配不到它们。因此必须换用ModuleSearch以崩溃堆栈中出现的模块文件名为检索键才能把这类寄生在宿主进程中的故障捞出来。同理KBM 等模块 DLL 被宿主进程加载时按模块名检索比按进程名更精准。该端点同样需要AppScope_AppVersion参数示例为0.100.2.0分诊新版时应按 2 节所述方法替换。5. 分诊实操建议三类查询如何配合结合手册内容与仓库结构一次完整的版本崩溃分诊可以按以下顺序执行Catch all 摸底用CabSearch拉取该版本全部 powertoys 相关进程崩溃确认崩溃总量与主要聚合按 EXE 拆分对安装器4 条与主程序/PT Run 等独立 exe 分别用Application查询把崩溃归属到安装阶段还是运行时以及具体哪个进程按 DLL 收口对运行在宿主进程内、进程名无法体现 PowerToys 归属的模块KB、预览/缩略图提供程序等用Failure/ModuleSearch按模块 DLL 名精确检索版本同步开始前先核对当前发布版本。文档中的0.100.2是其写作时的版本快照当前 main 分支 src/Version.props 的ReleaseTrainVersion已推进到0.101说明文档中的具体版本号、安装器文件名与AppScope_AppVersion取值都需要按手册提示随版本更新切勿直接沿用。交叉印证拿到崩溃聚合后可结合用户侧证据进一步分析——本地日志位于%LOCALAPPDATA%\Microsoft\PowerToys\Logs低权限组件在%USERPROFILE%/AppData/LocalLow/Microsoft/PowerToys详见 logging.md而 BugReportTool 生成的桌面压缩包则包含日志与系统信息可作为单个用户的现场补充。需要强调的适用前提上述查询模板全部指向 Microsoft 内部 Watson 门户仅内部成员可用本文对外部读者呈现的是查询构造方法——端点选择CabSearch / Application / Failure/ModuleSearch、参数命名AppScope_AppVersion、AppScope_AppName、Process、FailureSearchText、DateRange、MaxRows以及 PowerToys 的进程/DLL 命名规律。理解这套规律后你可以将其迁移到任何具备类似崩溃数据检索能力的诊断平台上。【免费下载链接】PowerToysMicrosoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考