
接手公司电脑时最怕的就是系统核心功能缺这缺那。前两天一台Win10办公机上用户要打印归档协议结果发现系统里没有XPS查看器网上教程全让去“设置-应用-可选功能”里在线装可这台电脑偏偏是物理隔离的内网机器Windows Update连不上按钮点了半小时进度条纹丝不动。后来我翻了半天镜像和FOD包才把这东西离线装上。今天就把这套离线安装XPS查看器的完整操作写出来包含原理、命令和踩坑记录适合IT运维、装机兄弟以及所有需要在无外网环境部署Windows的读者。这篇文章是修订版相比早期版本补了不少后来遇到的新坑。Win10从1803开始把XPS查看器改成了按需功能后面的LTSC、22H2这些版本处理方式又不一样所以网上很多老教程拿到新系统上用会直接报错。我会把不同情况都拆开讲你对着自己的系统状态挑方案就行。1. 先搞清楚XPS查看器为什么需要离线安装1.1 XPS和XPS查看器到底是个啥XPS全称XML Paper Specification是微软当年在Vista时代推出来对标PDF的电子文档格式。简单说它就是把文档的版面、字体、图形全部固定下来不管在什么设备上打开显示效果都一致。当年不少企业和政务系统都拿它做合同归档、公文分发因为它自带数字签名校验改没改过一眼就能看出来比纯图片扫描件可信得多。XPS查看器就是用来打开这种格式文件的官方工具同时还能把任意文档“打印”成XPS格式实现无纸化归档。实际工作中很多老业务系统导出的电子凭证、网银回单、税务单据都还是XPS格式没有这个查看器用户连文件都打不开更别说打印了。1.2 为什么Win10不默认带XPS查看器了从Windows 10 1803版本开始微软把XPS查看器从系统默认组件里拿了出来挪进了“可选功能”列表中。原因不复杂用XPS格式的人越来越少多数人用PDF预装这个组件对99%的用户都是白占磁盘空间对微软来说还多一个要维护的组件。但问题就出在这里。可选功能走的是功能按需加载Features on Demand简称FOD机制在线安装时系统会到Windows Update服务器上下载对应的功能包。只要电脑有网进入“设置-应用-可选功能-添加功能”搜索“XPS查看器”点安装一两分钟就搞定。可一旦电脑没有外网这个按钮就成了摆设进度条常年卡在0%。1.3 在线安装很快离线安装为什么麻烦离线安装XPS查看器的核心难点在于你手里没有微软“发货”的功能包文件。在线安装时系统通过Windows更新服务自动拉取、校验、部署。离线安装就需要我们手动把功能包放到本地然后让系统组件服务CBS直接从本地源部署。打个不严谨的比方可选功能就像超市货架Windows Update是送货卡车离线安装就是你提前把货搬到自己仓库再硬塞进货架。货不对板、版本不一致、路径不对任何一个环节出错都会导致安装失败。所以离线安装的本质就一句话给DISM工具指一个可用的本地功能源让它别去联网找更新。理解了这一点后面的命令就好懂了报错也能自己判断个大概。2. 离线安装前的准备版本识别与工具梳理2.1 先用三条命令确认系统底细拿到一台需要装XPS查看器的电脑第一件事不是急着找包而是确认系统版本和架构。winver这个命令会弹窗显示详细版本号先记下来比如Windows 10 企业版 LTSC 2021或Windows 10 专业版 22H2。其次在管理员命令行里看一下可选功能当前状态dism /online /get-features | findstr /i xps有输出的话会看到XPS-Viewer后面跟着启用/禁用状态。如果没有任何输出说明这台机器上是按FOD方式管理的得用另一条命令查Get-WindowsCapability -Online | Where-Object Name -like *XPS*这两条命令的区别下面详细说。最后确认一下系统架构echo %PROCESSOR_ARCHITECTURE%显示AMD64就是64位系统x86就是32位。绝大多数现代机器都是AMD64但选功能包时依然要小心下载错了直接报0x800f081f。2.2 XPS-Viewer和XPS.Viewer两种包形态的区别这个坑我见过不少人踩。Win10不同版本对XPS查看器的管理方式不一样传统可选功能feature早期版本1803之前以及部分LTSB版本用/enable-feature命令功能名为XPS-Viewer离线源是镜像里的sources\sxs目录。按需功能包capability1809以后的新版本功能名是XPS.Viewer~~~~0.0.1.0这种带一串波浪号的格式离线源是FOD功能包Cab文件用/add-capability命令安装。LTSC 2021和22H2基本都属于后者。这就是为什么老教程让你用/enable-feature你照着敲却报找不到功能。不是命令敲错了是系统版本变了管理机制也变了。2.3 三种离线方案的取舍我在实际工作中总结下来离线装XPS查看器主要有三条路方案需要的材料适用情况命令入口方案一原版Win10安装ISO镜像版本与系统一致且sxs目录里有XPS包/enable-feature方案二官方FOD功能包Cab几乎全版本通用包版本匹配即可/add-capability方案三install.wim镜像文件只有完整镜像没有独立FOD包时兜底挂载wim后当源方案一最轻量但依赖镜像里的sources\sxs目录很多精简版镜像把sxs目录删了会直接失败。方案二最稳只要找到对应系统的Cab文件基本一次成功。方案三是没办法时的土办法成功率看运气但值得一试。2.4 准备清单避免中途翻车动手之前先把下面几样东西备齐管理员权限的命令行窗口。右键开始菜单选择“Windows PowerShell(管理员)”或“命令提示符(管理员)”普通权限跑DISM会直接拒绝。与原系统相同build版本的功能包。这个最重要后面会反复强调。一个不含空格和中文的本地目录比如D:\FOD。路径里有空格容易引发莫名其妙的参数解析问题。如果走方案一准备一个Win10原版ISO镜像注意看版本号要和当前系统一致。19041就配1904122621就配22621跨版本基本必挂。3. 方案一用原版ISO的sources/sxs目录离线启用3.1 挂载镜像并查找XPS相关Cab方案一的核心思路是把原版安装镜像里的可选功能包目录作为系统本地源。先用资源管理器双击ISO文件或者用PowerShell挂载Mount-DiskImage -ImagePath D:\Win10_22H2.iso挂载后记下盘符假设为E盘。接下来检查一下镜像的sources\sxs目录里有没有XPS相关的Cab文件dir E:\sources\sxs | findstr /i xps如果列出了类似microsoft-windows-xps-viewer-package...开头的Cab文件说明这个镜像能用来装XPS查看器。如果这个目录是空的或者根本没有sxs这个目录那就别在这个方案上耗时间了直接跳去方案二。3.2 用DISM从本地源启用XPS-Viewer确认有包之后执行下面的命令dism /online /enable-feature /featurename:XPS-Viewer /all /source:E:\sources\sxs /limitaccess逐个参数解释一下/online操作当前正在运行的系统。/featurename:XPS-Viewer指定要启用的功能名。/all启用所有父功能避免依赖缺失。/source:E:\sources\sxs指定功能包源路径。/limitaccess限制DISM只能使用本地源不能访问Windows Update。这个参数很关键不加的话系统即使有本地源也可能先去尝试连外网一旦超时就会报错。执行过程中命令窗口会显示进度百分比从0到100最后提示“操作成功完成”。3.3 启用后的输出与验证成功后的输出大致是这样部署映像服务和管理工具 版本: 10.0.19041.1 映像版本: 10.0.19041.1288 启用一个或多个功能 [100.0%] 操作成功完成。然后去开始菜单搜索“XPS Viewer”能看到程序图标双击能正常打开就说明装好了。也可以用下面这条命令确认功能状态dism /online /get-featureinfo /featurename:XPS-Viewer状态显示“已启用”即可。3.4 这个方案的坑在哪里方案一最坑的地方在三点。一是镜像版本必须与原系统一致。我在一台20H219042系统上拿200419041的镜像当源结果报0x800f081f找不到源文件。两个版本看起来都是20H2但组件store里的包版本有细微差别DISM按版本匹配去找就是找不到。二是很多第三方精简镜像把sources\sxs目录删了或者里面根本没有XPS的包。判断方法就是前面那个dir命令没输出就果断换方案。三是部分LTSB/LTSC版本里XPS-Viewer功能名可能不一样。建议执行前先跑一下dism /online /get-features | findstr /i xps看看系统认识的FeatureName到底是什么照着输出结果填而不是死磕命令模板。4. 方案二用FOD功能包离线安装通用性最强4.1 FOD包去哪儿找对于新版Win10来说最可靠的离线安装方式就是用FOD功能包。包从哪里来三个渠道第一微软官方FOD ISO镜像。企业客户在批量许可服务中心或Visual Studio订阅里可以下载到独立的FOD ISO里面包含几乎所有可选功能的Cab包。下载对应你系统的build版本挂载后进去找XPS相关文件即可。第二微软更新目录网站。这是微软官方的驱动和更新包下载站支持直接搜索“XPS Viewer”按系统版本筛选下载。需要注意这里下载容易乱认准版本号和架构再点。第三从同版本的其他电脑上提取。如果公司里恰好有一台已经装好XPS查看器、且系统版本一致的电脑可以去它C:\Windows\servicing\Packages里找但Packages目录下的文件命名比较绕新手不建议折腾优先用前两种渠道。4.2 怎么判断自己下载的包对不对FOD功能包的Cab文件命名是有规律的一般是Microsoft-Windows-Xps-XpsViewer-Package~31bf3856ad364e35~amd64~~10.0.19041.1.cab拆开看Microsoft-Windows-Xps-XpsViewer-Package功能和组件名称。31bf3856ad364e35微软固定公钥标识所有官方包都是一样的。amd64架构。这里只有amd64的包才能装在64位系统上x86就是32位arm64是ARM设备。10.0.19041.1对应的Windows内部版本号这个必须和你的系统匹配。匹配原则很简单架构和版本号两个都对上基本就能装。版本号在winver弹窗里能看到比如19041对应2004/20H2/21H1/21H2/22H2的多个小版本但通常用最接近的包就行。下载完成后建一个干净目录比如D:\FOD把Cab文件丢进去。4.3 用DISM /add-capability离线安装打开管理员命令行先确认系统能识别这个功能dism /online /get-capabilities | findstr /i xps正常会输出XPS.Viewer~~~~0.0.1.0。然后执行安装dism /online /add-capability /capabilityname:XPS.Viewer~~~~0.0.1.0 /source:D:\FOD /limitaccess和方案一相同/limitaccess必须带上它强制DISM只用本地源不去联网。/source指向你放Cab文件的目录路径不用加\结尾。如果系统识别不了也可以指定完整的Cab路径直接装dism /online /add-capability /capabilityname:XPS.Viewer~~~~0.0.1.0 /source:D:\FOD\Microsoft-Windows-Xps-XpsViewer-Package~31bf3856ad364e35~amd64~~10.0.19041.1.cab /limitaccess执行过程中同样会显示进度到100%后提示安装成功。4.4 用PowerShell完成安装如果你更喜欢PowerShell也有对应的命令Add-WindowsCapability -Online -Name XPS.Viewer~~~~0.0.1.0 -Source D:\FOD这里注意-Name参数后面要写全整个capability名称包括那一长串波浪号。如果记不准先用这条命令查完整名称Get-WindowsCapability -Online | Where-Object Name -like *XPS*输出里会显示当前状态如果显示NotPresent说明还没安装显示Installed说明已经装好了不用重复折腾。4.5 补充直接用 /add-package 装Cab的另类思路FOD包本质也是一个标准的更新包Cab所以在某些特殊情况下可以直接用/add-package硬装dism /online /add-package /packagepath:D:\FOD\Microsoft-Windows-Xps-XpsViewer-Package~31bf3856ad364e35~amd64~~10.0.19041.1.cab这条命令不走capability映射机制直接往CBS里塞包。好处是绕开了/add-capability对功能名的依赖坏处是如果包本身有依赖条件它不会自动处理可能会报错。我有一个亲身经历帮客户装XPS查看器时/add-capability一直报0x800f0954但用/add-package直接装同一个包居然成功了。所以当/add-capability死活不给你过的时候/add-package值得一试成功率不低。4.6 注意架构、版本号和权限一个都不能错这个方案最需要注意的还是匹配问题。架构错报错版本号差太远报错Cab文件下载一半断了报错权限不够还是报错。所以如果安装失败第一反应别是找新包先检查这三项命令行是不是管理员权限。Cab文件的架构和系统架构是否一致。winver显示的版本号是否和Cab文件名里的版本号在同一区间。5. 方案三只有install.wim时挂载镜像提取功能源5.1 什么情况下才会走到这一步方案一和方案二都需要特定的源文件但现实中经常出现的情况是手头只有一个完整的install.wim镜像文件没有独立FOD包也没有镜像顶层的sources/sxs目录。安装镜像里的install.wim其实就是被压缩打包的系统里面带有完整的Windows目录结构。理论上如果这个wim里面恰好自带了XPS查看器的组件我们就可以把wim挂载起来把它里面的Windows目录当作DISM源来用。这个方法不是官方推荐的主流做法成功率取决于wim里有没有存XPS的Payload。但如果资源有限试一下也没有成本。5.2 挂载install.wim检查自带功能包先把install.wim复制到一个方便操作的目录比如D:\install.wim。然后用DISM查看里面有哪个索引dism /Get-WimInfo /wimfile:D:\install.wim输出会列出索引号、版本、名称等信息。选一个对你系统的索引创建挂载目录后挂载mkdir C:\Mount dism /Mount-Wim /wimfile:D:\install.wim /index:1 /MountDir:C:\Mount挂载完成后检查一下sxs目录是否有包dir C:\Mount\Windows\sxs | findstr /i xps如果有XPS相关的Cab说明可以用。如果没有可以试最后一步直接看C:\Mount\Windows\servicing\Packages里有没有类似Microsoft-Windows-Xps-*的文件夹。都没有的话说明这个wim是精简过的别浪费时间了。5.3 把挂载目录当DISM源检查通过后用以下命令把挂载目录当作源来启用功能dism /online /enable-feature /featurename:XPS-Viewer /all /source:C:\Mount\Windows /limitaccess这里/source指向的是挂载目录下的Windows目录而不是sxs目录。因为DISM会自己去Windows目录下的sxs、servicing等位置搜索需要的包给一个大范围比给死路径更稳妥。等命令跑完卸载挂载的wimdism /Unmount-Wim /MountDir:C:\Mount /Discard5.4 最后的手段手动复制与失败兜底如果挂载检查发现wim里根本没有XPS包那就只有最后一条路从别的相同版本机器上把已经装好的XPS组件文件拷过来。具体来说需要拷贝的内容包括C:\Windows\System32\xpsrchvw.exe等XPS相关文件以及注册表相关项。但这个方法涉及系统文件保护、Winsxs硬链接等复杂机制手动复制后经常出现功能菜单能打开但实际运行报错的情况。所以我一般不建议普通用户走到这一步。走到这里还没装上的话性价比最高的选择其实是放弃XPS查看器改用第三方的XPS阅读软件临时顶一下等能联网的机器上把FOD包下载好再回来装。这个话虽然不好听但在内网环境下确实是现实的选择。6. 安装验证与常见问题排查实录6.1 安装成功的三个验证动作装完之后别急着关机做三个快速验证。第一个用PowerShell确认功能状态Get-WindowsCapability -Online | Where-Object Name -like *XPS*新版本系统如果输出State : Installed说明capability已经就位。第二个直接运行查看器程序xpsrchvw如果程序窗口能弹出来说明核心组件正常。闭着眼验证不靠谱真正打开一个XPS文件看能否渲染这才是用户关心的事。第三个右键一个XPS文件看“打开方式”里是否出现XPS Viewer并且设为默认。如果关联成功用户双击文件就能直接打开不用每次手动选择程序。6.2 常见报错速查表报错代码常见原因处理方式0x800F0954系统策略强制从Windows Update下载Payload即使给了本地源也不认加/limitaccess参数尝试重启wuauserv服务或组策略里设置“从不尝试从Windows Update下载负载”0x800F081F找不到源文件源路径不对或功能包版本不匹配核对系统build和Cab版本换同版本包确认路径目录里确实有能用的Cab0x800F8006包损坏或格式不受支持重新下载Cab检查文件大小是否完整别用迅雷下载这种官方文件0x800F0907无法读取功能文件语言或版本区域不匹配确认Cab是多语言通用包还是特定语言包优先下带languageall的版本0x80070003路径不存在或路径中带空格/中文导致解析失败新建纯英文目录重新放包或给路径加英文双引号6.3 “修订版”重点这些坑我替你们踩过了第一坑服务没重启。有些机器上Windows Update服务处于僵死状态即使有本地源也会报0x800f0954。处理办法是在管理员命令行里执行net stop wuauserv net start wuauserv然后再跑安装命令这一招在我手上成功救回过好几次。第二坑不要盲信“同系统版本”这个说法。Windows内部build号有细微差异19041和19042、19043、19044、19045看起来差不多但FOD包并不完全通用。能匹配到精确的build最好匹配不到就优先选更接近的版本别拿差了十万八千里的包硬顶。第三坑下载包时注意看架构。在生产环境摸爬滚打这么多年我见过有人拿着x86的Cab往AMD64的服务器上装报错后还满世界找原因最后发现根源就是下载时手滑。架构这种低级错误最浪费时间执行命令前多扫一眼文件名里的amd64/x86字段比什么都强。第四坑安装成功不等于用户能用。组件装上只是第一步文件关联、默认应用、权限策略都会影响用户实际体验。如果是给特定用户账户装的最好用该账户实际登录验证一次XPS文件的打开和打印流程。最后分享一个我自己的习惯现在装机U盘里常备一份和主力系统同版本的FOD目录XPS查看器、NetFX3、DirectPlay这些常见的可选功能包放进去。装完系统先离线把这几个功能补齐能省掉很多后来单独找包的尴尬。XPS查看器看着是个小功能真遇到内网归档场景时它就是救命稻草。这种离线装可选功能的思路换成.Net Framework 3.5、DirectPlay这类组件也一样适用原理都是给DISM指一个本地源。希望这篇修订版能帮你少走点弯路。