ARTICLE DETAIL

资讯详情

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

Win10离线安装XPS查看器:DISM本地源命令详解

Win10离线安装XPS查看器:DISM本地源命令详解 最近帮一个客户的办公电脑装XPS查看器系统是Win10 21H2机器在内网完全没外网手动去“设置→应用→可选功能→添加功能”里点XPS查看器转圈半天最终报错。后来我用DISM从本地系统镜像提取源文件几分钟就装好了。说实话这个需求看着小众但在政务、银行、医疗这类还在用XPS格式做电子单据的行业里碰到的频率比我预想的高得多。网上关于“Win10安装XPS查看器”的教程不少但大多只告诉你“去可选功能里勾一下”完全没考虑断网、精简版镜像、企业定制系统这些真实场景。我这篇算是修订版把离线条件下的完整思路、命令参数、包版本匹配、报错排查重新梳理一遍保证你照着操作能一次装上。1. 先搞清楚这几个概念后面才不踩坑1.1 XPS查看器到底是什么为什么现在还要装它XPS全称XML Paper Specification是微软推出的电子文档格式作用和PDF类似能把文档的排版、字体、图形原样保留。当年微软推过一阵子很多银行回单、政务审批件、报销系统导出的单据都用的这个格式。Win7时代系统自带XPS查看器体验还不错到了Win10它变成了“可选功能”默认不安装。于是问题就来了你双击一个.xps文件系统提示没有关联应用或者单位的OA系统里嵌入了XPS预览控件结果一片白屏。遇到这种情况就得把XPS查看器装回来。它本身占用空间不大但属于系统功能组件不是随便下载个绿色软件就能替代的。1.2 可选功能和FOD机制是怎么回事Win10从1803版本开始引入“功能按需加载”也就是FODFeatures on Demand机制。系统把一些非核心功能从默认安装里拆出来平时不占磁盘空间需要的时候再装。XPS查看器就是其中一个FOD功能包内部用“Capability Name”来标识。XPS查看器对应的Capability名称是固定的叫XPS.Viewer~~0.0.1.0。网上很多教程说是“XPS Viewer”实际上DISM识别的是这一长串字符。你用在线方式添加、离线方式添加最终都是往系统里注册这个Capability。理解FOD机制很关键因为离线安装的本质就是“手动给DISM提供一个本地包源让它不需要联网也能解析和安装依赖”。后面所有操作都是围绕这一点展开的。1.3 在线添加为什么老失败在线安装XPS查看器的命令很简单管理员身份打开CMD执行DISM /Online /Add-Capability /CapabilityName:XPS.Viewer~~0.0.1.0它会去Windows Update下载对应的FOD包。但实际环境里失败率很高我总结了一下无非这几个原因内网隔离或防火墙拦截连不上微软更新服务器命令卡住后报错。企业内网用WSUS做更新管理WSUS里没有同步XPS这个FOD包本地找不到源。系统做过精简优化WinSxS组件库里的文件被清理过就算能联网也缺依赖。组策略禁用了Windows Update相关服务导致系统无法在线获取可选功能。这些情况在办公环境里太常见了。所以离线安装不是“备选方案”而往往是“唯一方案”。2. 离线安装前的准备工作2.1 你需要准备的3样东西离线安装XPS查看器不需要额外下载第三方工具但下面三样东西缺一不可一份Win10系统镜像优先是和你当前系统同版本的原版ISO。版本越接近越不容易出兼容性问题。一个可以正常使用的DISM环境Win10自带的DISM就可以不需要额外安装。管理员权限的命令行窗口。不管用CMD还是PowerShell都必须“以管理员身份运行”否则会报权限不足。如果手头没有ISO从当前系统自身的C:\Windows\servicing\Packages目录里找XPS相关cab文件也是可行的后面会详细说。2.2 检查当前系统版本确定包版本要匹配提取源文件之前建议先用winver确认系统的具体版本。Win10不同大版本的XPS包是不同的比如系统版本基线版本号LTSC 2019 / 18091776319031836220041904120H2 / 21H119042 / 1904321H2 / LTSC 20211904422H219045建议从版本号匹配或相近的镜像中提取XPS包。拿1809的包去装21H2的系统有概率失败因为DISM在解析包时会检查版本兼容性。这个属性我踩过后面在“常见问题”章节详细说。2.3 从ISO提取install.wim或install.esd准备好ISO后直接解压或者双击挂载到虚拟光驱进入sources目录。你会看到install.wim或者install.esd。如果是.wim文件那最好直接可以挂载。如果是.esd文件要注意DISM的/Mount-Wim参数不支持直接挂载ESD需要先转换成WIM。转换成WIM的命令如下注意把路径换成你自己的DISM /Export-Image /SourceImageFile:E:\sources\install.esd /SourceIndex:1 /DestinationImageFile:C:\install.wim /Compress:max /CheckIntegrity这里的/SourceIndex:1需要根据实际镜像内容调整。建议先用DISM /Get-WimInfo /WimFile:E:\sources\install.esd查看里面有几个索引找到和你系统版本一致的索引号再转换。2.4 先看一眼本机有没有现成组件包很多情况其实不用大动干戈去提取镜像因为本机WinSxS里可能还残留着XPS的组件包。在管理员命令行里执行dir C:\Windows\servicing\Packages\*XPS*如果能看到类似Microsoft-Windows-XPS-Viewer-Opt-Package~31bf3856ad364e35~amd64~~10.0.xxxxx.cab的文件说明组件包没被清理掉直接把C:\Windows\servicing\Packages作为Source目录就行不用碰ISO。这一步能省不少时间建议每次都先试一下。3. 核心实操用DISM离线添加XPS查看器3.1 挂载镜像并提取XPS相关cab文件如果你的本机没有残留组件包那就老老实实从镜像里提取。先把install.wim挂载到一个空目录比如C:\MountDISM /Mount-Wim /WimFile:C:\install.wim /Index:1 /MountDir:C:\Mount挂载成功后进入C:\Mount\Windows\servicing\Packages目录搜索所有XPS和XPSServices相关的cab文件。在命令行里可以直接筛选dir C:\Mount\Windows\servicing\Packages\*XPS*正常情况下能看到这些关键文件Microsoft-Windows-XPS-Viewer-Opt-Package~31bf3856ad364e35~amd64~~10.0.xxxxx.cabMicrosoft-Windows-XPS-Viewer-Opt-Package~31bf3856ad364e35~amd64~~10.0.xxxxx.cab对应架构的依赖包Microsoft-Windows-Printing-XPSServices-FeaturePackage~*.cab把这些cab文件复制到一个干净的目录比如C:\XpsSource。这里我建议直接复制所有名字里带XPS和XPSServices的包不要只复制一个因为DISM在添加Capability时可能需要解析依赖少一个都会报“找不到源文件”。复制完之后别忘了卸载镜像释放空间DISM /Unmount-Wim /MountDir:C:\Mount /Discard3.2 执行Add-Capability命令参数含义要明白源文件准备好之后管理员身份打开CMD执行DISM /Online /Add-Capability /CapabilityName:XPS.Viewer~~0.0.1.0 /Source:C:\XpsSource /LimitAccess这里两个参数很关键/Source指定本地源目录也就是刚才放cab文件的C:\XpsSource。/LimitAccess限制DISM只能访问本地指定的Source不能偷偷去Windows Update联网。不加这个参数DISM有可能会优先尝试联网在断网环境里就卡住了。命令执行后会有一段处理时间。正常情况下几十秒到几分钟不等界面会显示“正在处理……”最后显示“操作成功完成”。如果某个依赖包没找到DISM会报错具体排查见下一节。3.3 验证是否安装成功命令跑完之后别急着高兴先验证一下。用下面的命令查看Capability当前状态DISM /Online /Get-CapabilityInfo /CapabilityName:XPS.Viewer~~0.0.1.0输出里有一项是“State”如果显示Installed说明功能已经装上。更直观的验证方式有两种在开始菜单搜索“XPS查看器”或“XPS Viewer”能看到独立的应用入口。找一个.xps文件双击打开系统会用XPS查看器打开内容。到这一步离线安装就算成功了。3.4 补充一个更快的方法从本机WinSxS直接指定Source前面提到如果本机C:\Windows\servicing\Packages里已经有XPS相关组件命令可以简化为DISM /Online /Add-Capability /CapabilityName:XPS.Viewer~~0.0.1.0 /Source:C:\Windows\servicing\Packages /LimitAccess这种情况常见于系统是原版镜像安装、但没有启用XPS功能的场景。直接指向系统的Packages目录即可省去了挂载镜像、复制文件的步骤。如果本机Packages里没有对应cab再回到从ISO提取的流程。4. 实操中常见的坑和排查实录4.1 错误0x800f081f和0x800f0954源文件找不到这两个报错在离线安装XPS时出现频率最高核心原因是DISM在指定的Source目录里找不到匹配的包或者依赖不全。处理方法可以按顺序排查确认Source目录路径正确且cab文件确实在里面。确认cab文件架构和当前系统一致64位系统要用amd64的包32位系统要用x86的包。确认包的版本与当前系统版本匹配尽量使用同版本镜像提取的包。把XPS和XPSServices相关的cab全部放进Source目录避免依赖缺失。还有一个容易忽略的点某些精简版系统可能通过组策略或注册表禁用了DISM访问网络的功能这时候/LimitAccess参数反而能帮我们强制走本地源。如果报错信息里出现“0x800f0954”大概率就是DISM试图联网失败记得把/LimitAccess加上。4.2 镜像版本和系统版本不匹配导致的失败如果你手头只有Win10 1809的镜像但系统是21H2用1809的XPS包去装有时候能成功有时候会报“源文件找不到”或者“无法解析依赖”。这是因为FOD包虽然整体结构相同但包内部记录的版本信息必须和系统当前版本兼容。优先策略当然是找同版本的ISO。实在找不到也可以试着把Source目录里放多个版本的cab文件让DISM自己匹配。这个方法不保证成功但我在实际工作中试过有时候确实能碰对。另外如果你的机器是LTSC版本建议用LTSC对应的镜像提取包成功率会高不少。4.3 install.esd无法挂载的解法ESD格式是微软用来压缩分发镜像的格式DISM可以读取它的信息但不能直接/Mount-Wim挂载会提示“不支持此操作”。解决方法是先转换成WIM。转换前记得用/Get-WimInfo查看ESD内包含哪些镜像索引选对索引号再导出。有一点要提醒转换WIM文件会占用不小的磁盘空间一个install.esd通常4GB左右转换后可能变成5GB以上。建议在空间充足的盘上操作转换完成后及时清理。4.4 安装成功但XPS文件打不开或没有关联安装成功后有时双击.xps文件系统还是会弹窗让你选择打开方式这是因为系统没有自动建立文件关联。处理方法很直接右键.xps文件选择“打开方式” → “选择其他应用” → 在列表里找“XPS查看器”勾选“始终使用此应用打开”。或者在“设置 → 应用 → 默认应用”里按文件类型指定.xps为XPS查看器。还有一种情况是文件后缀是.oxps这是旧版格式XPS查看器也能打开同样需要手动指定一下关联。5. 顺手整理的两个进阶玩法5.1 用PowerShell命令替代DISMPowerShell里也有对应的Cmdlet适合写脚本时用。查看状态用Get-WindowsCapability -Online -Name XPS.Viewer~~0.0.1.0离线添加用Add-WindowsCapability -Online -Name XPS.Viewer~~0.0.1.0 -Source C:\XpsSource -LimitAccessPowerShell底层其实还是调用DISM但输出格式更结构化方便在脚本里做条件判断。比如先判断State是不是Installed如果没装才执行添加这样可以在大批量部署时避免重复操作。5.2 做一个小工具一键离线安装脚本如果你需要给多台电脑装建议把命令写成批处理脚本。把下面内容保存为InstallXPS.bat放到cab文件同一个目录里右键“以管理员身份运行”就行echo off net session nul 21 if %errorlevel% neq 0 ( echo 请以管理员身份运行本脚本。 pause exit /b ) echo 正在离线安装XPS查看器... DISM /Online /Add-Capability /CapabilityName:XPS.Viewer~~0.0.1.0 /Source:%~dp0 /LimitAccess if %errorlevel% equ 0 ( echo 安装成功。 ) else ( echo 安装失败请查看上方错误信息。 ) pause脚本里的%~dp0表示脚本所在的目录这样你只需要把bat和cab文件放在一起拿到任何一台电脑上双击就能用不用改路径。注意批处理文件必须和cab文件在同一目录否则Source路径会指向错误。5.3 进阶在部署镜像阶段直接集成XPS查看器如果你平时需要批量重装系统可以用NTLite这类镜像定制工具在加载install.wim之后把XPS查看器的FOD包集成进去保存镜像后再安装系统。这样装出来的系统自带XPS查看器连后装这一步都省了。不过要提醒一句NTLite集成的前提是镜像本身包含完整的FOD包或者你能从对应的官方ISO里提取到匹配的包。集成的时候还要保持版本一致不然部署后一样会出现功能异常。适合系统管理员在批量部署前做镜像定制对普通用户来说有点重了。在我实际处理过的案例里离线装XPS查看器最棘手的不是命令本身而是搞清楚“包版本和系统版本是否匹配”以及“依赖是否齐全”。只要这两点做到位DISM基本是一次成功。另外多说一句如果单位内网确实有WSUS或者SCCM环境也可以把XPS的FOD包同步到更新服务器上然后直接用在线命令装那又是另一种省事玩法。最后留个操作习惯建议装完XPS查看器后顺手把.xps文件的默认打开方式设置好免得用户回头又报“打不开文件”。
返回列表