简介:这份离线安装包面向需要在无外网环境中为 Windows Server 2012 R2 部署或更新 IIS 的 IT 管理员与运维人员,解决内网、隔离机房或严格网络安全策略下无法在线拉取系统组件的问题。压缩包共 1568 个文件,约 99.04MB,以 dll 动态库、resx 资源文件、exe 可执行程序为主,辅以 aspx 页面、config 配置、sql 脚本、browser 浏览器定义及 tlb、targets 等组件描述文件,完整覆盖 IIS 角色与 Side-by-Side 系统组件存储所需内容。已有 572 人学习下载,说明其在离线部署场景中具备一定参考价值。包内组件可用于通过 DISM 命令添加 IIS 角色与功能,并支持安装后核验服务状态,帮助读者在断网条件下完成 Web 服务器搭建、应用程序池与身份验证配置等基础运维工作,减少对在线源的依赖。
1. 离线装 IIS 这件事,版本对不上比不会装更折磨人
上周帮一个做内网项目的朋友处理一台 Windows Server 2012 R2,机器在机房里,没有外网,连微软的源都摸不到。他要在上面跑一个老系统,必须开 IIS,结果在服务器管理器里点“添加角色和功能”,进度条卡在“正在搜索安装源”半天不动,最后弹一句“找不到源文件”。这就是典型的离线环境装 IIS 翻车现场——图形界面看着友好,实际上它默认要去拉在线源,离线机器上根本走不通。
Windows Server 2012 R2 这个版本现在还有大量存量设备在跑,尤其是内网、工控、老旧业务系统,IIS 离线安装包(也就是Sources\SxS目录那一套)几乎是运维必备的救命稻草。这篇笔记就是把我自己反复装过的那套流程拆开写清楚:装什么、怎么挂源、参数怎么指、装完怎么验证、坏了怎么救。适合两类人——第一次在离线机上开 IIS 的新手,以及被“找不到源文件”折磨过、想搞清楚 SxS 到底怎么用的熟手。
2. 装前把环境盘清楚:版本、源和依赖一个都不能错
离线装 IIS 最容易出问题的地方不在安装动作本身,而在装之前的准备。很多人拿到一个“IIS 离线安装包”就直接双击,结果要么报错,要么装到一半缺组件。这一章先把环境要求、源目录结构和依赖关系讲透,后面动手才不会返工。
2.1 确认系统版本和 IIS 版本对应关系
Windows Server 2012 R2 对应的是 IIS 8.5,这个必须记牢。IIS 的版本是跟系统绑死的,不存在“装个更高版本”的说法。你在 2012 R2 上能装的只有 8.5,功能集也是这个版本定死的。常见误区是有人拿 Windows Server 2016 的 SxS 目录往 2012 R2 上怼,结果安装程序能跑,但角色服务列表对不上,装完 IIS 管理器打不开。
先确认系统版本,用命令行最稳:
# 查看系统版本和内部版本号 systeminfo | findstr /B /C:"OS Name" /C:"OS Version" # 或者用 wmic 看更细的版本 wmic os get Caption,Version,BuildNumber /value输出里OS Version: 6.3.9600就是 2012 R2 的标志(6.3 是 R2,6.2 是 2012 原版)。这一步别省,我见过有人把 2012 原版当 R2 处理,SxS 源挂上去后角色安装报“源文件版本不匹配”,排查了半天才发现系统版本搞错了。
版本确认之后,还要确认系统是标准版还是数据中心版。这两个版本在 IIS 功能上没有差别,但如果你后续要装一些依赖 .NET 或远程管理的组件,授权层面会有区别。离线安装本身不受影响,但心里要有数。
2.2 离线源目录长什么样,SxS 到底放哪
所谓“IIS 离线安装包”,核心就是系统安装介质里的Sources\SxS目录。这个目录里放的是所有按需功能(Features on Demand)的源文件,IIS 的角色服务在离线安装时就是从这里取组件。完整的离线源结构大致是这样:
| 路径 | 内容 | 作用 |
|---|---|---|
Sources\SxS\ | 按需功能源文件(.cab 等) | IIS 角色安装时取组件 |
Sources\sxs\microsoft-windows-iis-* | IIS 相关组件包 | 对应各角色服务 |
| 安装介质根目录 | install.wim等 | 系统镜像本体,一般不用动 |
关键点:SxS 目录必须完整,不能只拷一部分。有些人图省事只复制了microsoft-windows-iis开头的几个包,结果装到“应用程序开发”这类角色服务时就报缺源。我一般建议直接把整个Sources\SxS目录原样拷到目标机器上,比如放到D:\OfflineSource\SxS,路径里不要有中文和空格,这是血泪经验——带空格的路径在某些 PowerShell 命令里会被拆开解析。
如果你手上没有系统安装介质,另一个常见做法是从同版本、同补丁级别的机器上把C:\Windows\WinSxS里对应的组件提取出来,但这个操作复杂且容易出错,不推荐新手碰。最稳的还是找一份同版本的 ISO,挂载后取Sources\SxS。
2.3 依赖组件和前置条件清单
IIS 不是孤立装的,它依赖几个系统层面的东西。离线环境下这些依赖如果没提前准备好,安装会中途失败。装之前对照下面这张表过一遍:
| 依赖项 | 是否必须 | 检查方式 | 离线处理 |
|---|---|---|---|
| .NET Framework 3.5 | 部分角色服务需要 | 服务器管理器功能列表 | 需单独离线源 |
| .NET Framework 4.5+ | ASP.NET 4.5 角色需要 | 注册表或命令行 | 2012 R2 自带 4.5 |
| 远程管理组件 | 需要远程管理时 | 功能列表 | SxS 内包含 |
| 管理工具(IIS 管理器) | 建议装 | 角色服务勾选项 | SxS 内包含 |
.NET Framework 3.5 是个高频坑。2012 R2 默认没启用 3.5,而 IIS 的 ASP.NET 3.5 角色服务依赖它。离线环境下启用 3.5 需要单独指定源,命令和装 IIS 类似,都是指向 SxS。如果你不需要跑老版 ASP.NET 应用,可以不装这个角色服务,能省不少事。
提示:装之前先把系统补丁打到和目标环境一致的水平。补丁级别不一致时,SxS 里的组件版本可能和系统现有组件对不上,安装会报“组件存储损坏”之类的错。
3. 两种装法落地:图形界面挂源和命令行指定 SxS
环境盘清楚之后,真正动手装 IIS 有两条路:图形界面的服务器管理器,和命令行的 DISM / PowerShell。图形界面直观但离线挂源稍微绕,命令行干脆利落但参数要记准。两条路我都走过,下面分别写清楚,你按自己的习惯选。
3.1 图形界面装法:指定备用源路径的正确姿势
服务器管理器里装 IIS 的入口是“添加角色和功能”。离线环境下,走到“确认安装所选内容”那一步时,会看到一个“指定备用源路径”的链接,点开填 SxS 路径。这一步是图形界面装法的关键,填错了就报“找不到源文件”。
完整步骤:
- 打开服务器管理器,点“添加角色和功能”,一路下一步到“服务器角色”。
- 勾选“Web 服务器 (IIS)”,弹窗提示添加所需功能,点“添加功能”。
- 继续下一步到“角色服务”,按需勾选。新手建议先只勾默认项,装通了再补。
- 到“确认”页,点“指定备用源路径”,填入
D:\OfflineSource\SxS(换成你的实际路径)。 - 点“安装”,观察进度。
这里有个细节很多人忽略:备用源路径填的必须是 SxS 目录本身,不是它的上级目录。填D:\OfflineSource会失败,必须填到D:\OfflineSource\SxS。另外路径末尾不要加反斜杠,加了在某些版本上会解析异常。
图形界面装法的好处是角色服务勾选直观,坏处是出错时提示信息很含糊,就一句“找不到源文件”,不告诉你缺哪个包。所以如果你勾了很多角色服务,建议分批装,先装核心的,验证通过再补开发类组件。
3.2 命令行装法:DISM 指定 Source 参数
命令行装法我更常用,因为参数明确、日志可查、适合批量。核心命令是 DISM 启用 IIS 相关功能,并用/Source指定 SxS 路径。
先看一个装核心 IIS 功能的例子:
# 启用 IIS-WebServerRole 及核心子功能,指定离线源 dism /online /enable-feature /featurename:IIS-WebServerRole /featurename:IIS-WebServer /featurename:IIS-CommonHttpFeatures /featurename:IIS-StaticContent /featurename:IIS-DefaultDocument /featurename:IIS-HttpErrors /Source:D:\OfflineSource\SxS /All逐段说明:/online表示操作当前运行的系统;/enable-feature后面跟功能名,可以一次跟多个;/Source:指向 SxS 目录;/All表示如果父功能需要也一并启用。功能名必须用系统认的英文名,写错了会报“功能名称未知”。
功能名从哪来?用下面这条命令列出所有 IIS 相关功能:
# 列出名称含 IIS 的所有功能及其状态 dism /online /get-features | findstr /I "IIS"输出里每个功能都有“功能名称”和“状态”。状态是“已启用”的不用管,是“已禁用”的按需启用。我一般会先跑这条命令,把要装的功能名抄下来,再拼到 enable 命令里,避免手打出错。
如果你更习惯 PowerShell,等价写法是:
# 用 PowerShell 启用 IIS 核心功能,指定离线源 Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole, IIS-WebServer, IIS-CommonHttpFeatures -Source "D:\OfflineSource\SxS" -AllPowerShell 的好处是功能名可以用数组一次传多个,读起来清楚。注意-Source参数同样要指到 SxS 目录,-All对应 DISM 的/All。
3.3 角色服务怎么选:按业务需求分批装
IIS 的角色服务有几十个,全勾上没必要,还容易因为某个包缺失导致整体失败。我的做法是按业务需求分三批:
第一批是核心 Web 服务,必装:IIS-WebServerRole、IIS-WebServer、IIS-CommonHttpFeatures、IIS-StaticContent、IIS-DefaultDocument、IIS-HttpErrors、IIS-HttpLogging、IIS-RequestMonitor。这批装完,静态站点就能跑。
第二批是管理工具:IIS-ManagementConsole、IIS-ManagementService。装完才能在图形界面里管 IIS,不然只能用命令行。
第三批按应用类型补:跑 ASP.NET 4.5 加IIS-ASPNET45;跑 ASP.NET 3.5 加IIS-ASPNET并先启用 .NET 3.5;需要 URL 重写、压缩、认证的再单独加对应功能。
分批装的好处是每批装完可以立刻验证,出问题能快速定位是哪一批的包缺失。一次性全勾然后失败,排查起来就是黑匣子。
注意:
IIS-ManagementService启用后还要单独启动 WMSVC 服务,并配置远程管理凭据,否则远程连不上。这一步离线环境同样不需要外网,但容易被漏掉。
4. 避坑与排查:离线装 IIS 最常见的五个翻车点
装 IIS 离线版,报错信息往往很吝啬,就一句“找不到源文件”或者“组件存储损坏”,不告诉你具体缺什么。这一章把我踩过的、帮别人排查过的五个高频坑按“现象 → 原因 → 解决”列清楚,遇到问题先对照这里。
4.1 现象:安装卡在“正在搜索安装源”后报找不到源文件
原因:图形界面没指定备用源路径,或者路径填错。默认情况下服务器管理器会尝试在线源,离线机器上必然失败。
解决:回到“确认”页点“指定备用源路径”,确认填的是 SxS 目录本身,路径无中文无空格,末尾不加反斜杠。如果已经点了安装才想起来,取消后重新走一遍,备用源路径在重新安装时还能填。
4.2 现象:DISM 报“源文件版本与系统版本不匹配”
原因:SxS 目录来自不同版本或不同补丁级别的系统。比如拿 2012 原版的 SxS 往 2012 R2 上用,或者补丁级别差太多。
解决:换一份与目标系统同版本、同补丁级别的安装介质,重新提取 SxS。确认方法是用systeminfo看目标机版本,和提供 SxS 的源机版本对比,OS Version和补丁列表都要对得上。
4.3 现象:装 ASP.NET 3.5 角色时报缺 .NET Framework 3.5 源
原因:2012 R2 默认未启用 .NET 3.5,而 IIS 的 ASP.NET 3.5 角色依赖它。离线环境下启用 3.5 需要单独指定源。
解决:先用 DISM 启用 .NET 3.5 并指向 SxS:
# 离线启用 .NET Framework 3.5,源指向 SxS dism /online /enable-feature /featurename:NetFx3 /Source:D:\OfflineSource\SxS /All启用成功后再装 IIS 的 ASP.NET 3.5 角色服务。顺序不能反,反了会报依赖缺失。
4.4 现象:IIS 装完,管理器打不开,提示 MMC 管理单元错误
原因:管理工具角色服务没装全,或者IIS-ManagementConsole装了但相关依赖缺失。常见于只装了核心 Web 服务就以为完事的情况。
解决:补装IIS-ManagementConsole和IIS-ManagementService,用 DISM 指定同一 SxS 源。装完重启服务器管理器,或者直接运行inetmgr验证。
4.5 现象:站点能建但访问 500,日志里报模块加载失败
原因:应用需要的角色服务没装,比如跑 ASP.NET 应用但没装IIS-ASPNET45,或者需要 URL 重写但没装对应模块。
解决:看 IIS 日志里具体报哪个模块,对照功能名补装。日志默认在C:\inetpub\logs\LogFiles,错误信息里会带模块名。补装时同样指定 SxS 源,装完iisreset重启 IIS。
5. 装完怎么验证:三条命令确认 IIS 真的跑通了
装完不验证等于没装。离线环境没有外网,不能靠访问外部页面判断,得用本地手段确认。我一般走三步:查功能状态、查服务、查本地站点响应。三步都过,才算真跑通。
5.1 查功能状态和服务状态
先确认功能确实启用了,不是“装了一半”:
# 查看 IIS 核心功能状态,确认都是 Enabled dism /online /get-featureinfo /featurename:IIS-WebServerRole | findstr /I "State" # 查看 W3SVC 服务状态 sc query W3SVCState显示Enabled说明功能启用成功。sc query W3SVC里STATE是RUNNING说明万维网发布服务在跑。如果服务没起来,先net start W3SVC手动启动,起不来就看事件查看器里的应用程序日志,通常是组件缺失或配置损坏。
5.2 本地访问默认站点验证
IIS 装完会自带一个默认站点,监听 80 端口。在服务器本机用浏览器或命令行访问http://localhost,能看到 IIS 欢迎页就说明静态内容服务正常。命令行验证更干脆:
# 本地请求默认站点,看返回状态码 Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing | Select-Object StatusCode, StatusDescription返回StatusCode: 200就是通的。如果返回 404,检查默认站点是否启动、物理路径C:\inetpub\wwwroot是否存在。如果连接被拒,多半是 W3SVC 没跑或防火墙拦了本地回环(本地回环一般不受防火墙影响,所以优先查服务)。
5.3 建一个测试页确认动态能力
静态页通了只说明核心服务正常,如果你装了 ASP.NET 或其他动态角色,还得验证动态处理。在C:\inetpub\wwwroot下放一个测试页:
<!-- test.aspx,放在 wwwroot 下 --> <%@ Page Language="C#" %> <html><body><h1>IIS 离线安装验证通过</h1></body></html>然后访问http://localhost/test.aspx。能正常渲染说明 ASP.NET 角色服务装对了。如果报 500.21(处理器未安装),说明IIS-ASPNET45没装或没注册,补装后运行%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i注册。
验证这一步我吃过亏。有一次装完核心服务就交付了,结果对方跑 ASP.NET 应用直接 500,回头补装角色服务又得重新挂源。从那以后我每次装完 IIS,都强制走一遍“功能状态 → 服务 → 静态页 → 动态页”四步,一步不落。离线环境尤其如此,现场没有外网,返工成本比在线环境高得多。
希望这套流程帮到你,少在“找不到源文件”上耗时间。
本文还有配套的精品资源,点击获取