ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PowerToys 安装验证实战:预览处理器注册检查与安装完整性自检脚本深度解析

PowerToys 安装验证实战:预览处理器注册检查与安装完整性自检脚本深度解析 PowerToys 安装验证实战预览处理器注册检查与安装完整性自检脚本深度解析【免费下载链接】PowerToysMicrosoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys本文基于仓库文档 verification-scripts.md 及其指向的tools/Verification scripts/目录中的两个 PowerShell 脚本展开讲解 PowerToys 在 Windows 安装完成后的“体检”方法如何用脚本检查文件预览处理器Preview Handler的注册状态以及如何用安装完整性脚本逐项核对注册表、核心文件、模块与 MSIX 包。读完本文你可以复制可运行的检查命令、理解每个检查项背后的注册表路径与 WiX 安装器实现并在 PowerToys 功能异常时快速定位安装问题。一、为什么需要安装验证脚本PowerToys 是一个组件庞大的工具集合主程序、十余个独立模块FancyZones、Keyboard Manager、PowerToys Run、ZoomIt 等、多个 shell 扩展预览/缩略图处理器以及若干以 MSIX 稀疏包形式安装的上下文菜单组件和 Command Palette。安装器WiX 打包见 installer/PowerToysSetupVNext/同时支持PerMachineHKLM需管理员与PerUserHKCU免管理员两种作用域两者在安装路径、注册表位置和 DSC 模块落盘位置上都不同。安装过程中任何一步注册失败——比如某个shellex键没写进去、某个 RunPlugins 下的插件 DLL 缺失——都可能表现为“功能看起来坏了”却没有报错。仓库因此提供了两类验证脚本见 Verification Scripts 文档脚本用途PowerShell 要求权限要求Check preview handler registration.ps1检查各文件类型的预览处理器注册当前用户/机器PowerShell 7.2脚本首行#Requires -Version 7.2无需管理员verify-installation-script.ps1全面验证一次 PowerToys 安装注册表、文件、模块、DSC、MSIX 包PowerShell 5.1PerMachine 校验需管理员两者都只做读取不修改系统可以安全地在出问题的机器上重复执行。二、Check preview handler registration.ps1预览处理器注册检查2.1 检查范围文档明确列出了该脚本检查预览处理器注册的文件类型Markdown 系列.markdown、.mdtext、.mdtxt、.mdown、.mkdn、.mdwn、.mkd、.md图形与文档.svg、.svgz、.pdf3D/工程.gcode、.bgcode、.stl文本配置.txt、.ini值得注意的是当前仓库中脚本的$TypesToCheck数组比文档列表多了一个.qoiQOI 图像对应PowerToys.QoiPreviewHandler见 脚本第 18 行说明 QOI 预览支持是后加入的、文档尚未同步更新。脚本对 17 种扩展名逐一查询并用Write-Progress显示“Querying Windows Registry”的进度条每项类型计 2 次进度共 34 步。2.2 工作原理IPREVIEW_HANDLER 接口 CLSIDWindows 文件资源管理器通过shellex下的IPreviewHandler接口 CLSID 来定位某个扩展名的预览处理器。脚本的核心常量是$IPREVIEW_HANDLER_CLSID {8895b1c6-b41f-4c1c-a562-0d564250836f}对每种扩展名脚本查询当前用户作用域的注册表值脚本第 56 行HKCU:\Software\Classes\扩展名\shellex\{8895b1c6-b41f-4c1c-a562-0d564250836f}\(default)该(default)值存放的是“实际提供预览的 COM 对象”的 CLSIDApp GUID。脚本再用一张 GUID → 名称映射表把 GUID 翻译成可读名称脚本第 20-29 行处理器 CLSID名称{07665729-6243-4746-95b7-79579308d1b2}PowerToys PDF handler{ddee2b8a-6807-48a6-bb20-2338174ff779}PowerToys SVG handler{ec52dea8-7c9f-4130-a77b-1737d0418507}PowerToys GCode handler{dd8de316-7b01-48e7-ba21-e92c646704af}PowerToys BGCode handler{8AA07897-C30B-4543-865B-00A0E5A1B32D}PowerToys QOI handler{45769bcc-e8fd-42d0-947e-02beef77a1f5}PowerToys Markdown handler{afbd5a44-2520-4ae0-9224-6cfce8fe4400}PowerToys Monaco fallback handler{DC6EFB56-9CFA-464D-8880-44885D7DC193}Adobe Acrobat DC不在表中的 GUID 会原样输出方便识别第三方占用了该扩展名的预览槽位比如.pdf被 Adobe Acrobat DC 接管时你会直接看到它的名称。2.3 输出结果与当前限制按文档描述工具会“显示每种文件类型的用户处理器与机器处理器并展示对应处理器的 App GUID”。实际运行时结果是一张三列表格NameCurrentUserHandlerMachineWideHandler.mdPowerToys Markdown handlerNothing.pdfAdobe Acrobat DCDidnt check需要特别指出从源码结构看机器级HKLM检查目前是被注释掉的脚本第 61 行 对HKLM://Software/Classes/...的查询行以#开头因此MachineWideHandler列在当前版本中恒为 “Didnt check”随后因 GUID 为 null 显示 “Nothing”。如果你需要检查机器级注册可以用同一路径模式手动查询 HKLM 分支Get-ItemPropertyValue -Path HKLM:\Software\Classes\.md\shellex\{8895b1c6-b41f-4c1c-a562-0d564250836f} -Name (default) -ErrorAction SilentlyContinue此外未注册的扩展名在CurrentUserHandler列显示 “Nothing”这是排查“文件资源管理器预览窗格不生效”时最有价值的一列——它直接回答“当前用户下这个扩展名到底挂没挂上处理器”。三、verify-installation-script.ps1安装完整性自检这是目录中更全面的一个脚本按文档的说法属于“help verifying the PowerToys installation”这一目标的核心工具。它带完整的 PowerShell 帮助注释块-InstallScope、-InstallPath参数说明与示例运行方式# 校验 PerMachine 安装需管理员 .\verify-installation-script.ps1 -InstallScope PerMachine # 校验 PerUser 安装 .\verify-installation-script.ps1 -InstallScope PerUser # 指定自定义安装路径覆盖默认路径探测 .\verify-installation-script.ps1 -InstallScope PerMachine -InstallPath D:\PT3.1 检查项全景脚本的Main函数按作用域分支执行脚本第 767-797 行每个检查项都会实时打印[PASS] / [WARN] / [FAIL]前缀的彩色状态行并记入$script:Results。检查按类别Category组织如下Registry注册表主注册表键是否存在PerMachine 查HKLM:\SOFTWARE\Classes\PowerToysPerUser 查HKCU:\SOFTWARE\Classes\PowerToysInstallScope值是否与预期作用域一致perMachine/perUser“程序和功能”卸载项在…\CurrentVersion\Uninstall\*中找DisplayName含 “PowerToys” 的条目这是 PowerToys 出现在系统卸载列表的依据若存在InstallLocation则额外记一条通过脚本注释说明该项非必需因为 PowerToys 使用直接文件引用做系统绑定。Installation安装目录安装文件夹是否存在。路径解析策略Get-PowerToysInstallPath脚本第 239-297 行是三级回退显式传入的-InstallPath默认路径PerMachine 用${ProgramFiles}\PowerToysPerUser 用${LOCALAPPDATA}\PowerToys从卸载注册表的InstallLocation或从UninstallString形如C:\Program Files\PowerToys\unins000.exe截取父目录。Core Files核心文件必备文件必须存在否则记 FailPowerToys.exe、PowerToys.ActionRunner.exe、License.rtf、Notice.md。Signed Files签名文件安装根目录约 100 个关键二进制主程序、各模块接口 DLL、全部预览/缩略图处理器如PowerToys.MarkdownPreviewHandler.dll、Image Resizer、Keyboard Manager、Run 核心、MouseUtils、Workspaces、ZoomIt 等见 脚本第 314-463 行WinUI3Apps\子目录下的 WinUI3 应用Settings、AdvancedPaste、Hosts、FileLocksmith、Peek、EnvironmentVariables、MeasureTool、NewPlus、PowerRename、RegistryPreview、PowerAccent 等Tools\下的PowerToys.BugReportTool.exeKeyboardManagerEditor\与KeyboardManagerEngine\子目录中的两个 exeRunPlugins\下 20 个 PowerToys Run 插件 DLLCalculator、Folder、Indexer、OneNote、History、PowerToys、Program、Registry、WindowsSettings、Shell、Uri、WindowWalker、UnitConverter、VSCodeWorkspaces、Service、System、TimeDate、ValueGenerator、WebSearch、WindowsTerminal。这一类的检查规则是存在记 Pass缺失只记Warning而非 Fail——脚本注释解释为“多数签名文件关键但部分可能因配置可选项而缺席”。Modules模块目录KeyboardManagerEditor、KeyboardManagerEngine、RunPlugins、Tools四个关键目录是否存在缺失记 Warning。脚本注释特别说明PowerToys 并不把模块装在单独的 “modules” 子目录而是直接集成进主安装目录或特定子目录。Registry Handlers协议与 COM 注册URL 协议…\SOFTWARE\Classes\powertoys键及shell\open\command子键缺失记 FailToast 通知 CLSID{DD5CACDA-7C2E-4997-A62A-04A597B58F76}缺失记 Warning。DSC ModuleDSC 配置模块PerUser检查%USERPROFILE%\Documents\PowerShell\Modules\Microsoft.PowerToys.ConfigurePerMachine检查${ProgramFiles}\WindowsPowerShell\Modules\Microsoft.PowerToys.Configure。Command Palette 与 Context Menu PackagesMSIX 稀疏包WinUI3Apps\CmdPal目录下是否存在.msix包Command Palette 以 MSIX 形式安装四个上下文菜单稀疏包ImageResizerContextMenuPackage.msix安装根目录、FileLocksmithContextMenuPackage.msix、PowerRenameContextMenuPackage.msix、NewPlusPackage.msix均在WinUI3Apps\缺失记 Fail。3.2 结果汇总模型所有检查项汇入$script:Results.Summary含总检查数、Pass/Fail/Warning 计数脚本据此给出三种总体状态脚本第 804-815 行FailedChecksWarningChecksOverallStatus00Healthy00Healthy with Warnings0任意Issues Detected结果中还记录了时间戳、计算机名、用户名与 PowerShell 版本便于把两次运行输出做差异对比。脚本只检查指定作用域不做跨作用域回退——这一点在Main函数注释中明确“no fallbacks, only what installer should create”。四、检查项与 WiX 安装器源码的对应关系验证脚本的每一项都不是凭空设定都能在仓库的 WiX 安装器定义中找到“写入方”。对照源码可以确认脚本检查的正是安装器承诺要写的内容1.InstallScope注册表值。Core.wxs 第 8-10 行 在安装目录组件中写入Software\Classes\powertoys键下的InstallScope字符串值其取值$(var.InstallScope)由 Common.wxi 根据构建变体决定PerUser true时为perUser否则为perMachine。验证脚本对 “InstallScope值 预期作用域” 的检查正是与此闭环。2. 两个 UpgradeCode 常量。验证脚本头部定义的$PowerToysUpgradeCodePerMachine {42B84BF7-...}与$PowerToysUpgradeCodePerUser {D8B559DB-...}与 Common.wxi 第 45、54 行 中两种作用域的UpgradeCodeGUID完全一致可用于在注册表中识别“装过哪个作用域的安装器”。3. URL 协议处理器。Core.wxs 第 41-50 行 在powertoys键下写入URL Protocol值与shell\open\command目标为PowerToys.exe %1。验证脚本Test-RegistryHandlers中检查的URL Protocol与 URL Command 两项即对应此组件——这条协议是设置界面深链deep link跳转的基础。4. Toast 通知 CLSID。Core.wxs 第 31-38 行 注册{DD5CACDA-7C2E-4997-A62A-04A597B58F76}其LocalServer32指向PowerToys.exe -ToastActivated。验证脚本检查该 CLSID 存在即确认系统 Toast 通知通道可用。5. DSC 模块落盘位置。PerMachine 安装时Core.wxs 第 82-95 行 把Microsoft.PowerToys.Configure.psd1/psm1装入${ProgramFiles}\WindowsPowerShell\Modules\Microsoft.PowerToys.Configure\组件标记Vitalno即 DSC 失败不阻塞安装PerUser 安装则由自定义操作改写到用户 Documents 下的模块目录相关路径拼接逻辑见 CustomAction.cpp 第 408-484 行。验证脚本Test-DSCModule的双分支路径检查正对应这两种机制——DSC 模块是 PowerToys 被dsc/winget dsc配置语言管理的前提。6. 预览处理器接口 CLSID。预览检查脚本使用的{8895b1c6-b41f-4c1c-a562-0d564250836f}是系统标准的 IPreviewHandler 接口 CLSID仓库中 src/common/utils/registry.h 以及 src/modules/previewpane/common/cominterop/IPreviewHandler.cs 等安装器/预览模块代码都引用同一 CLSID可以确认脚本查询的是与安装器注册时一致的标准位置。五、实操排障建议结合两个脚本的输出常见场景的处理路径如下预览窗格对某类文件失效先跑Check preview handler registration.ps1需 PowerShell 7.2。若该扩展名CurrentUserHandler为 “Nothing”说明当前用户作用域未注册若显示的是第三方名称如 Adobe Acrobat DC 占用.pdf说明槽位被抢占需要按 PowerToys 文档指引在设置中重新启用对应预览项或处理冲突。整体功能异常/升级后异常以管理员身份运行.\verify-installation-script.ps1 -InstallScope PerMachine或 PerUser。重点关注 Fail 项主注册表键、InstallScope、卸载项、URL 协议属于硬性失败MSIX 上下文菜单包缺失会导致相应右键菜单消失RunPlugins中个别插件缺失只会是 Warning但会表现为 PowerToys Run 少了某类查询结果。双作用域混淆如果你既装过 PerMachine 又装过 PerUser用两个 UpgradeCode GUID 在HKLM/HKCU卸载注册表中检索可确认各自残留情况再分别用-InstallScope参数校验。自动化集成验证脚本无交互、状态分级清晰Healthy / Healthy with Warnings / Issues Detected适合接入装机后的巡检流程输出含机器名与时间戳可直接归档比对。六、小结tools/Verification scripts/目录中的两个脚本构成了 PowerToys 安装后的两层验证预览处理器检查脚本以“扩展名 × 作用域”粒度回答“文件资源管理器插件是否挂上”其查询的IPREVIEW_HANDLER注册表路径与 GUID 映射表可直接复用完整性脚本则以 WiX 安装器的实际写入内容为基准对注册表、核心/签名文件、模块目录、DSC 模块与 MSIX 稀疏包做逐项核对并以三态健康度收敛结论。两者配合安装器源码Core.wxs、Common.wxi阅读可以把“安装是否正常”从经验判断变成可复现的检查清单。【免费下载链接】PowerToysMicrosoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表