☰
Win10离线安装XPS查看器:三种方案与踩坑指南
2026/10/1 3:21:35 网站建设 项目流程

接手公司电脑时,最怕的就是系统核心功能缺这缺那。前两天一台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目录。
  • 按需功能包(capability):1809以后的新版本,功能名是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就配19041,22621就配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 这个方案的坑在哪里

方案一最坑的地方在三点。

一是镜像版本必须与原系统一致。我在一台20H2(19042)系统上拿2004(19041)的镜像当源,结果报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等位置搜索需要的包,给一个大范围比给死路径更稳妥。

等命令跑完,卸载挂载的wim:

dism /Unmount-Wim /MountDir:"C:\Mount" /Discard

5.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版本,换同版本包;确认路径目录里确实有能用的Cab
0x800F8006包损坏或格式不受支持重新下载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指一个本地源。希望这篇修订版能帮你少走点弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询