简介:面向使用Windows XP SP3操作系统的用户,这份组件包旨在解决系统缺少IIS 5.0安装源的问题,直接提供完整的组件文件。压缩包大小约11.27MB,内含安装所需的全部文件,解压后通过“添加/删除Windows组件”指向对应文件夹即可被系统识别,免去寻找原版光盘的麻烦,适合需要快速搭建个人Web服务器或学习IIS基础配置的读者。目前已有151人学习下载。IIS 5.0不仅支持静态HTML和ASP动态脚本,还集成了FTP、SMTP、NNTP服务,可同时承担网页发布、文件传输、邮件收发与新闻组功能;借助CGI机制还能运行外部程序,灵活性较高。完成安装后,用户应重视安全加固,包括设置高强度密码、禁用不必要的服务、及时安装安全补丁,并通过IIS管理器配置虚拟主机、端口和主机头,利用日志与性能监视器持续优化站点。它能帮助初学者绕过常见安装陷阱,为后续扩展ASP.NET等应用打下坚实基础。
1. 老系统还在用 IIS 5.0 组件:它到底解决什么问题
Windows XP 已经淡出主流视线很多年,但仍有不少内网工具、教学模拟环境和老旧设备控制台依赖它。当你在这类机器上需要临时架一个 Web 服务,或者必须跑一段只能运行在 IIS 上的 ASP 程序时,WinXP 自带的 IIS 组件就绕不开。所谓 XP_IIS5.0 组件,简单说就是把 IIS 5.0/5.1 这一套 Web 服务文件从系统安装盘里抽出来、重新打成独立包,专门用于在没有原始安装盘、或者系统已被封装裁剪的情况下,把 IIS 重新装回 Windows XP。
我处理过好几台这样的机器:系统是某个 Ghost 封装版,控制面板里根本找不到“Internet 信息服务”的安装入口;即便找到,点了也会提示“请插入 CD”,而光驱里早没有那张盘。这时手工部署组件包是唯一能走通的路。这篇文章就按我平时动手的顺序展开:先讲组件里是什么,再讲两种安装路径,然后给出安装后的验证清单、必改参数,以及我反复踩过的几个坑。新手可以照步骤复现,熟手重点看避坑部分和最后的批处理部署脚本。
2. 先看懂 IIS 5.0 组件里装了什么:文件构成与安装原理
2.1 IIS 5.0 和 IIS 5.1 的关系,别再把版本搞混
严格说,IIS 5.0 是由 Windows 2000 自带的 Web 服务版本,Windows XP 专业版自带的是 IIS 5.1。两者核心结构基本一致,元数据库格式、虚拟目录模型、ISAPI 扩展机制都一脉相承。XP 上的 IIS 5.1 更像是在 5.0 基础上做了安全修补的后续版本,而不是一次架构重写。
所以你会看到很多流传的组件包名字写着“IIS5.0”,实际装到 XP 上也能稳定跑。组件包的来源,大多是从带 IIS 的 Windows 2000 或 Windows XP 专业版安装盘里把 i386 目录下与 IIS 相关的文件抽出来,再做成自解压包或目录结构。这类包在容易出现的问题是文件不全,或者把 Windows 2000 的 MetaBase 配置直接带过来,导致启动时报错。判断一个包是否可用,不要只看名字,要看里面有没有完整的inetsrv文件集和iis.inf安装定义文件。
2.2 核心文件与目录:装完以后系统里会多出什么
IIS 5.0 组件安装完成后,主要落盘位置是%WINDIR%\system32\inetsrv和C:\Inetpub。理解这些路径,后面排查问题时能少走弯路。下表是平时排查经常会用到的部分:
| 文件 / 目录 | 作用说明 |
|---|---|
inetinfo.exe | IIS 主进程,承载 IISAdmin 服务,负责读取元数据库并启动各类子服务 |
w3svc.dll | World Wide Web 服务核心,处理 HTTP 请求的入口 |
iisreset.exe | 命令行重启 IIS 的实用工具,安装后应存在于 system32 下 |
MetaBase.bin | 元数据库文件,保存站点、虚拟目录、端口、权限等配置 |
iisui.dll/iisadmin.dll | 管理界面相关组件,决定“Internet 信息服务”管理单元是否可用 |
adsutil.vbs | 用脚本读写元数据库的辅助工具,自动化配置时很常用 |
C:\Inetpub\wwwroot | 默认网站的主目录 |
C:\Inetpub\AdminScripts | 管理脚本目录,包含 adsutil.vbs 等脚本 |
很多手工安装失败的案例,就是只复制了inetinfo.exe和w3svc.dll,漏掉了MetaBase.bin初始化,或者没注册 adsiis.dll 导致无法用脚本取配置。真正完整的组件安装,绝不是“复制几个 exe 就能跑”这么简单。
2.3 安装过程在后台做了什么:理解这条链条才能定位故障
无论用控制面板还是组件包手工安装,后台完成的工作可以归纳为五步:
- 通过 INF 文件定义的文件列表,把 IIS 服务程序、DLL 和脚本复制到
inetsrv目录; - 逐个注册 COM 组件,把 DLL 的类标识写入注册表;
- 创建 IISADMIN 和 W3SVC 两个服务项,并设置启动类型为自动;
- 首次启动 IISADMIN 时,程序读取元数据库;如果不存在则初始化一份默认元数据库;
- 根据元数据库内容创建默认站点,并把主目录指向
C:\Inetpub\wwwroot。
这套逻辑解释了为什么“复制了几个文件,服务却起不来”:没有服务项,系统不会在开机时加载 inetinfo.exe;没有元数据库,进程即使启动,也不知道要监听哪个端口、服务哪个目录。后面第 3 章的手工部署脚本,本质就是把这五步补全,只是把 INF 安装换成了人工命令。
3. 把 IIS 5.0 组件装进 Windows XP:两条可复现的路径
3.1 路径 A:有系统源文件时,用 Windows 组件向导安装
如果你手上还有 Windows XP 专业版的安装光盘,或者硬盘上有完整的 i386 目录,优先考虑官方组件向导,这条路最稳。操作步骤是:
- 打开“控制面板 → 添加或删除程序 → 添加/删除 Windows 组件”;
- 在弹出的“Windows 组件向导”中勾选“Internet 信息服务(IIS)”;
- 点击“下一步”,系统开始复制文件;
- 如果提示需要安装文件,把路径指向 i386 目录或光盘根目录;
- 完成后在浏览器访问
http://localhost,看到默认页面即说明安装结束。
我一般不会点完向导就走,而是顺手把默认网站的主目录、默认文档和执行权限检查一遍。因为向导装完的只是基础状态,之后要调整的参数一个都不会少。另外,如果系统是 Windows XP Home 版,组件向导里根本没有 IIS 选项,这条路直接走不通,只能看路径 B。
想用命令行完成同样的安装,可以用无人值守参数:
sysocmgr /i:%windir%\inf\sysoc.inf /u:components.txt对应的components.txt是个纯文本配置文件,里面写明要安装的组件节:
[Components] iis_common=On iis_www=On iis_inetmgr=On这里iis_common对应公用文件,iis_www对应 World Wide Web 服务,iis_inetmgr对应管理单元。具体节名以你拥有的 i386 目录里sysoc.inf的实际内容为准,不同封装盘的写法可能略有差异。用这种方式的好处是可以在批处理脚本里调用,适合给多台配置相同的机器批量安装。
3.2 路径 B:没有安装盘时,用手工复制加注册的方式部署
大多数遇到“XP_IIS5.0 组件”这个问题的场景,都是没有安装盘、只有压缩包。组件包解压后通常带一个i386目录,里面是 IIS 相关文件。先看有没有iis.inf,有的话推荐用 INF 安装方式,这是组件包作者已经定义好的安装路径:
rundll32 setupapi.dll,InstallHinfSection DefaultInstall 132 D:\xp_iis\i386\iis.inf命令中的132是 setupapi 的安装标志,表示执行 INF 文件中的 DefaultInstall 节。这里的逻辑是:INF 里已经写好了文件复制列表、注册表写入项和服务创建指令,比手工一条条敲命令更完整。前提是 INF 里确实存在[DefaultInstall]节,并且文件相对路径没有写错。
如果组件包里只有散文件、没有 INF,那就只能手工部署。下面是一段我常用的兜底脚本,在 XP 上用管理员账户执行:
@echo off set SRCDIR=D:\xp_iis\i386 set INETSRV=%WINDIR%\system32\inetsrv if not exist "%INETSRV%" mkdir "%INETSRV%" copy /y "%SRCDIR%\inetinfo.exe" "%INETSRV%\inetinfo.exe" copy /y "%SRCDIR%\w3svc.dll" "%INETSRV%\w3svc.dll" copy /y "%SRCDIR%\isapi.dll" "%INETSRV%\isapi.dll" copy /y "%SRCDIR%\iisreset.exe" "%WINDIR%\system32\iisreset.exe" for /f "delims=" %%i in ('dir /b "%INETSRV%\*.dll" 2^>nul') do regsvr32 /s "%INETSRV%\%%i" sc create IISADMIN type= own start= auto binPath= "%INETSRV%\inetinfo.exe" sc create W3SVC type= own start= auto binPath= "%INETSRV%\inetinfo.exe" depend= IISADMIN net start IISADMIN net start W3SVC这段脚本的逻辑分四段:先建目录并复制核心文件;再将其注册所有 DLL 到系统;然后用sc create创建 IISADMIN 和 W3SVC 两个服务;最后启动。要注意的是,sc create必须指定完整路径,binPath 里的反斜杠会被当成转义符,所以路径里的反斜杠不能省略。
手工方式能解决“没有安装盘”的燃眉之急,但它绕过了 INF 里可能存在的依赖检查。如果组件包是从 Windows 2000 光盘里抽出来的,注册表写入项可能和 XP 不完全一致,装完以后用iisreset能正常执行的,基本问题不大;如果服务起不来,优先去看C:\WINDOWS\system32\CatRoot或者系统日志里的错误信息,多半是某个 DLL 没注册上。
3.3 安装完成后必须先检查的三个参数
无论用哪条路径装完,我接下来一定会看这几个位置,它们决定 IIS 能不能真正提供服务:
第一个是网站主目录路径。默认应该是C:\Inetpub\wwwroot,如果组件包在安装时改到了别的盘,后续所有站点文件都要放到对应目录。查看方式是在“Internet 信息服务”管理单元里打开“默认网站 → 属性 → 主目录”,确认“本地路径”符合预期。
第二个是匿名访问账号。IIS 默认用IUSR_机器名作为匿名访问身份,如果组件包没有创建这个账号,或者账号被禁用,所有页面都会弹身份验证框。检查“本地用户和组”里是否存在IUSR_开头的账号,没有被禁用。
第三个是默认文档列表。默认首页包括Default.htm、Default.asp、Index.htm。如果项目入口是index.asp而列表里没有,访问根路径就会 404。用命令行读取:
cscript %WINDIR%\system32\inetsrv\adsutil.vbs get w3svc/1/root/DefaultDoc输出的就是当前默认文档列表,缺少哪项就补哪项。这三个参数确认无误后,再往 wwwroot 里放测试页才有意义。
4. IIS 5.0 组件避坑指南:五个反复出现的经典故障
4.1 组件向导里看不到 IIS,或者 IIS 选项是灰色的
这个现象在 Ghost 封装版系统上非常常见。封装者为了压缩系统体积,会把sysoc.inf里的 IIS 安装条目直接删掉,界面里自然找不到入口;还有一种情况是系统本身是 Home 版,微软就没给它 IIS 组件。
解决方法是先确认系统版本:右键“我的电脑 → 属性”,看到“专业版”才能走组件向导;Home 版直接切到第 3.2 节的手工部署。对专业版,手动编辑%WINDIR%\inf\sysoc.inf,搜索iis关键字,如果没有对应条目,可以用记事本补一行。补完后重新打开组件向导,IIS 就能出现在列表里。注意:编辑前先把文件备份一份,改错格式可能导致后续所有组件都无法安装。
4.2 安装过程中提示“找不到 iis.inx”或者反复要求插入光盘
我遇到过好几次这样的场景:把安装路径指向了本地 i386 目录,系统还是继续弹“请插入光盘”。原因有两个:一是 i386 目录里缺少 IIS 的安装定义文件,系统在核对文件列表时发现对不上;二是当前用户的权限不足,无法从本地路径读取文件。
处理办法有两条。先看提示的具体文件名,如果是iis.inx或iis.inf缺失,说明这个 i386 目录本身就是不完整的,Net 安装路径解决不了,只能走组件包手工部署。如果文件都在仍然报错,那就用管理员账户重新执行安装,并且尽量把组件包解压到根目录,不要放在中文路径或带空格的文件夹里,避免 INF 解析路径出错。
4.3 默认网站起不来,端口 80 被占
装完以后访问 localhost 提示“无法显示网页”,打开服务管理器发现 W3SVC 处于停止状态,事件查看器里写着端口绑定失败。这是典型的 80 端口冲突。在 XP 时代,除了其他 Web 服务,某些即时通信软件也喜欢占用 80 端口做本地监听。
排查命令是用netstat看端口占用:
netstat -ano | findstr ":80"找到占用 80 端口的 PID,再去任务管理器确认对应进程。如果不是关键服务,直接结束进程;如果这个端口必须留给其他程序用,那就给 IIs 默认网站换个端口:在默认网站属性里把 TCP 端口改成 8080,访问时用http://localhost:8080。这个改动只影响当前站点,IISAdmin 服务的端口配置不用动。
4.4 本地能打开页面,远程访问却报 403.1 或 403.2
403.1 表示“执行访问被拒绝”,403.2 表示“读取访问被拒绝”。这两个错误在早期测试环境里很常见,很多人以为是防火墙,其实是站点权限配置不对。
403.1 的根源通常是主目录的“执行权限”没有给够。在默认网站属性的“主目录”页里,把执行权限从“无”改成“纯脚本”,ASP 页面就能跑;如果页面还需要调用可执行文件,才考虑“脚本和可执行文件”,但为了安全不建议这么做。403.2 的根源则是 NTFS 权限问题,IIS 匿名账号对 wwwroot 目录没有读取权限。给IUSR_机器名赋予读取权限后,重启 IIS 再刷新页面。我习惯在改完权限后先停掉浏览器缓存,否则容易误判问题依旧存在。
4.5 IISADMIN 服务启动失败,提示元数据库初始化错误
这是手工部署最常见的翻车点。现象很明确:net start IISADMIN报错,系统日志里出现“无法加载元数据库”之类的描述。原因通常是组件包里的MetaBase.bin和当前系统不匹配,或者从别的机器复制过来的元数据库里带有错误配置。
处理思路是先备份再替换:先停止服务,把现有 MetaBase.bin 改名,尝试用组件包里的干净版本重新放入。如果组件包没有提供 MetaBase.bin,那就把当前文件彻底移走,让 IIS 首次启动时自动生成一份默认元数据库。这个操作会丢失之前所有的站点配置,所以我会先记录当前站点绑定的端口和主目录,生成后再手动改回来。此招只适合重新部署,不适合已经跑着业务、仅有配置损坏的机器,那种情况必须从之前的备份恢复。
5. 部署 IIS 5.0 组件之后:验证步骤与必须调整的参数
5.1 三步验证:服务状态、本地请求、远端访问
装完组件不等于能对外服务,我把验证固定为三步。第一步检查服务状态:
sc query IISADMIN sc query W3SVC两条命令分别查看 IIS 管理服务和 Web 服务是否处于 RUNNING 状态。如果 W3SVC 没有随 IISADMIN 启动,多半是元数据库里没有把 WWW 服务设置为启动项,或者服务依赖关系没建立好。
第二步做本地请求验证。在浏览器里输入http://localhost,能够看到默认页面说明主目录和默认文档都正常。这一步只验证 IIS 自身,不涉及网络配置;如果这一步都失败,问题一定出在本机配置上。
第三步做远端请求验证。从同一局域网的另一台机器访问这台机器的 IP 地址,比如http://192.168.1.20。这里最容易忽略的是 Windows XP 自带的防火墙会拦截 80 端口入站请求。确认 Web 站点能正常响应本地请求后,到“Windows 防火墙 → 例外”里勾选“Web 服务器”或手工添加 80 端口。只有这一步通了,部署才算真正完成。
5.2 三个必须收紧的参数:扩展名映射、目录权限、日志记录
IIS 5.0 是那个年代攻击面比较大的组件。装完后第一件事,是把用不到的 ISAPI 扩展映射清理掉。具体在“默认网站 → 属性 → 主目录 → 配置 → 应用程序映射”里,把.htr、.idq、.printer这类历史遗留映射删除。它们是早期安全事件的高频入口,现在几乎没有业务需要这些扩展,留着只有风险。
第二个参数是权限收紧。wwwroot 主目录只需要给 IUSR 账号“读取”和“目录浏览”权限,不需要给“写入”权限。如果项目确实有上传文件的需求,把上传目录单独建一个子目录,只对这个子目录放开写权限。这样即使上传功能有漏洞,攻击者也拿不到整个站点的写权限。
第三个参数是日志。打开“网站属性 → 网站”页,勾选“启用日志记录”,格式选“W3C 扩展日志文件格式”,目录保持默认即可。日后排查端口冲突、异常请求、脚本报错,都要靠这份日志。很多人装完 IIS 直接开跑业务,出了问题却无从下手,就是因为这一步被跳过了。
5.3 别忘了备份元数据库:这是事后后悔药
元数据库承载了站点所有配置,而它只是一个文件,位置在%WINDIR%\system32\inetsrv\MetaBase.bin。它没有自带热备份机制,一旦文件损坏,整个 IIS 配置全部丢失。我每次调完站点参数,都会顺手做一次备份:
net stop iisadmin /y copy /y "%WINDIR%\system32\inetsrv\MetaBase.bin" "%WINDIR%\system32\inetsrv\MetaBase.bin.bak" net start iisadmin先停 IISAdmin 再复制,是为了保证文件处于非写入状态。这条命令里的/y是让系统在停止服务时顺带停掉依赖服务,重启时先启动 IISAdmin,W3SVC 再自动跟上。备份文件建议在系统盘之外单独留一份,因为系统盘崩溃时,备份和原文件可能一起消失。
6. 把 XP_IIS5.0 组件部署写成一条命令:批处理完全自动化
到了多台机器重复部署的时候,手工复制、注册、创建服务的路数就显得低效了。我的做法是将整个安装过程收敛到一个批处理脚本里,配合组件包的目录结构一次跑完。下面是我实际用过的模板,放到组件包根目录下执行:
@echo off setlocal enabledelayedexpansion title XP_IIS5.0 component deployment set SRC=%~dp0i386 set INETSRV=%SystemRoot%\system32\inetsrv set WWWROOT=%SystemDrive%\Inetpub\wwwroot echo [1/5] Copying component files if not exist "%INETSRV%" mkdir "%INETSRV%" copy /y "%SRC%\*.*" "%INETSRV%\" >nul 2>nul if exist "%SRC%\iis.inf" ( rundll32 setupapi.dll,InstallHinfSection DefaultInstall 132 "%SRC%\iis.inf" ) echo [2/5] Registering DLLs for /f "delims=" %%i in ('dir /b "%INETSRV%\*.dll" 2^>nul') do regsvr32 /s "%INETSRV%\%%i" echo [3/5] Creating services if missing sc query IISADMIN >nul 2>nul if errorlevel 1 ( sc create IISADMIN type= own start= auto binPath= "%INETSRV%\inetinfo.exe" ) sc query W3SVC >nul 2>nul if errorlevel 1 ( sc create W3SVC type= own start= auto binPath= "%INETSRV%\inetinfo.exe" depend= IISADMIN ) echo [4/5] Starting services net start IISADMIN >nul 2>nul net start W3SVC >nul 2>nul echo [5/5] Creating default page inspect if not exist "%WWWROOT%" mkdir "%WWWROOT%" if not exist "%WWWROOT%\index.htm" ( echo IIS OK ^> "%WWWROOT%\index.htm" ) start http://localhost/脚本里有几个值得留意的设计。%~dp0取的是批处理自己所在的路径,这样无论脚本放在 U 盘还是硬盘任意位置,都能正确找到旁边的 i386 目录。for /f循环逐条注册 DLL,是因为 regsvr32 不支持通配符,必须每个文件单独调用。服务创建前用sc query先查一遍,避免重复安装时报“服务已存在”。专门创建index.htm是为了验证最终效果,如果页面内容和预期一致,说明从文件复制到服务启动整条链路都通了。
我在实际使用中还会在脚本开头加一行chcp 936 >nul,防止某些全角字符在命令行里乱码。另外,XP 系统没有“以管理员身份运行”这种入口,整个脚本必须直接使用管理员账户登录后执行,否则sc create会直接拒绝访问。
这个脚本解决的是“从零部署”的问题,不负责升级和卸载。真要卸载时,反过来停服务、删服务、删除inetsrv目录和C:\Inetpub,再清理注册表里残留的 IIS 相关项,我不会建议用脚本自动做卸载,因为注册表清理做不干净,下次再装容易留下隐患。我在生产环境里只信任“干净的系统再跑部署脚本”,而在反复折腾的实验机器上,部署脚本跑完再手动对照一次服务列表和主目录权限,确认没有异常再交付。希望你下次在老 XP 机器上装 IIS 5.0 组件时少走几趟弯路,一次到位。希望帮到你。
本文还有配套的精品资源,点击获取