ARTICLE DETAIL

资讯详情

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

IIS 5.1 安装失败?dll 文件不全才是真正原因及完整解决指南

IIS 5.1 安装失败?dll 文件不全才是真正原因及完整解决指南 简介这是一份针对Windows XP系统的IIS 5.1完整安装包专门解决其他安装包在复制dll文件时频繁报错、导致安装中断的常见问题。作者特意集合了运行所需的全部动态链接库并在多台电脑上安装验证确保不会出现“无法复制”的报错适用于需要在本机搭建Web服务器、调试ASP脚本或提供FTP服务的开发者和运维人员。包内共311个文件涵盖dll、htm、exe、ex_、in_、oc_、cab等多种类型既有核心程序与组件也有默认网页、示例脚本、帮助文档及配置文件功能完整压缩后仅13.53MB轻量易用。目前已有157人学习使用对于此前安装IIS 5.1屡屡受挫的用户来说这份整理完备的安装包能直接完成部署省去逐一手动寻找dll文件的时间和精力。1. IIS 5.1 为什么还在被下载dll 不全才是安装失败的真正原因如果你手头还维护着老 ASP 项目或者培训机构机房里要用 XP 环境上课迟早会碰到同一个提示安装 IIS 时弹出“安装程序无法复制 dll 文件”。很多人第一反应是系统中毒其实是安装源里缺了组件文件。IIS 5.1 完整安装版这个资源核心就是把那些反复提示“无法复制”的 dll 全部找齐按原本的 i386 目录结构放好让组件向导一次把文件复制完不再要求插盘或浏览到不存在的路径。这套东西适合两类人一是必须给老系统装 IIS 5.1、又被安装源折腾过几次的运维二是刚接触 ASP 程序、需要在本机跑通老代码的开发者。它不解决性能问题不做功能增强只解决“装得上”和“装完功能全”这两件事。下面我会从包内结构、安装步骤、常见翻车点一直讲到验证和固化全程按可复现的方式来写。2. 完整安装包的结构与前置检查先搞清 dll 从哪来、缺在哪2.1 官方安装源为什么总缺 dll精简系统与 SP 整合的连锁反应Windows XP 原版光盘里的 i386 目录是压缩过的IIS 的组件文件要在安装时才展开到C:\WINDOWS\system32。原版盘本身没问题但你在网上下的 Ghost 版、精简版甚至某些“集成 SP3”的二次封装盘制作时常把 i386 里一批不常用的文件删掉以减少体积。IIS 安装向导跑到一半发现inetinfo.exe、asp.dll或iisadmin.dll不在源里就会直接报“无法复制”。这里有个容易误判的地方报错信息里的文件名未必是你系统里缺那个文件。向导优先从安装源读取源里没有才考虑系统现有文件。所以很多人在本机system32里能找到同名 dll却照样报错原因就是源盘里那一个拷贝不存在。完整安装包的意义就是把这份缺失的源补回来而不是让用户手动往system32里塞文件。2.2 安装包目录对应关系用一张表看清楚每个 dll 的归位拿到完整包后先看目录结构不要急着双击安装。一个合格的 IIS 5.1 完整包至少应该包含下面这几块目录 / 文件作用安装时去往哪里i386\inetstp.inf组件定义文件向导读取它才知道要复制哪些文件C:\WINDOWS\inf目录后被调用i386下其余文件安装源的完整文件集包括压缩格式的 dll安装过程中由组件向导展开system32\inetsrv相关 dll元数据库管理、IIS 管理单元依赖C:\WINDOWS\system32\inetsrvsystem32脚本引擎 dlljscript.dll、vbscript.dll等C:\WINDOWS\system32inetinfo.exeIIS 核心服务进程C:\WINDOWS\system32\inetsrvinetstp.inf是安装流程的入口。组件向导先读这个文件里的文件列表再逐条去 i386 目录找对应文件。早期网上流传的所谓修复包大多是别人从自己机器上复制出来的散装 dll没有配套的 INF 定义装到一半还是会要源文件。判断一个包是不是“完整安装版”就看它有没有按这个结构组织。system32\inetsrv下的文件负责服务核心和管理单元最容易缺失的是iisadmin.dll和adsiis.dll。前者是 IIS 管理对象的 COM 实现后者是 ADSI 接口两者不全会导致管理工具“打不开”或者读取不到站点配置。2.3 装前自查脚本先跑一遍知道这台机器差在哪我先跑一个检查脚本确定目标机器的system32里哪些 IIS 相关文件压根不存在。如果连这些都没有说明这台机器是典型的精简系统直接用完整包安装即可如果文件都在那问题多半出在安装源路径上。echo off set SYS%WINDIR%\system32 for %%f in (inetinfo.exe iisadmin.dll adsiis.dll asp.dll jscript.dll vbscript.dll) do ( if exist %SYS%\%%f ( echo [OK] %%f ) else ( echo [缺失] %%f ) ) if exist %SYS%\inetsrv\MetaBase.bin ( echo [OK] MetaBase.bin ) else ( echo [缺失] MetaBase.bin - 未安装过 IIS 或元数据库损坏 ) pause把这个 bat 存成check_iis.bat双击运行。inetinfo.exe是 IIS 的主进程asp.dll是 ASP 脚本解释入口jscript.dll和vbscript.dll是脚本引擎MetaBase.bin是 IIS 5.1 的元数据库文件。只要有一个缺失安装向导多半会在对应步骤报“无法复制”。这类问题我一般不建议用网上那种“dll 修复工具”一键扫。工具扫描的是注册表和常见路径的匹配情况它不知道 IIS 5.1 需要的是哪个版本、哪个语言的 dll。全套跑一遍下来往往会引入新的 dll 冲突后面我会在避坑章节专门写这一点。3. 动手安装从组件面板到 dll 复制错误的完整处理3.1 图形路径控制面板添加组件会卡在哪一步标准操作是控制面板 → 添加/删除程序 → 添加/删除 Windows 组件 → 勾选“Internet 信息服务 (IIS)”再点“详细信息”确认子项。IIS 5.1 的子组件默认包含这几项“FrontPage 2000 服务器扩展”、“Internet 信息服务管理单元”、“公用文件”、“万维网服务”。如果后续要传文件把“文件传输协议 (FTP) 服务”也勾上。ASP 支持不在单独的子项里它属于“万维网服务”的组成部分所以只勾 IIS 不会出现 ASP 不能用的问题。走到“正在复制文件”这一步时Windows XP 经常弹出对话框提示需要 “Windows XP Professional Service Pack x” 安装盘上的文件并要求浏览路径。这就是经典的缺源提示。此时点“浏览”把路径指到完整包里的i386目录向导会自己继续往下复制。这里有个细节浏览时选到i386这一层就可以不要进到更深目录如果你把包解压后改过目录名路径里不要带中文sysocmgr和复制引擎对中文路径支持不好容易莫名其妙地再次报文件找不到。3.2 无人值守参数sysocmgr 指定完整源路径图形方式每次都要手动浏览批量装机器时效率太低。IIS 5.1 的组件安装底层走的是sysocmgr可以用应答文件指定要装的组件再用/z参数把源路径指到完整包里整个安装过程不弹窗。echo [Components] C:\iis_ans.txt echo iis_commonon C:\iis_ans.txt echo iis_wwwon C:\iis_ans.txt echo iis_aspon C:\iis_ans.txt echo iis_inetmgron C:\iis_ans.txt sysocmgr /i:%WINDIR%\inf\sysoc.inf /u:C:\iis_ans.txt /z:C:\IIS51_FULL/i指向系统组件清单sysoc.inf这是 Windows 自带的不需要改/u是应答文件里面每一行xxxon表示启用对应组件/z后面接完整包的根目录sysocmgr会从这个目录下找i386。你要根据自己的解压位置改/z的路径。关于组件名iis_common是公用文件iis_www是万维网服务iis_asp是 ASP 支持iis_inetmgr是管理单元。如果你的系统版本对iis_asp不识别可以把这一行删掉再跑因为iis_www内部默认带 ASP 引擎。这一步跑完后如果没报错系统会直接弹“完成组件安装”不需要重启但保险起见装完我会手动重启一次让服务注册彻底写完。3.3 首次启动检查w3svc 起来才算安装结束安装完成不等于服务能用。IIS 5.1 在安装结束后会自动注册并启动W3SVC服务但精简系统常出现“服务已安装但启动失败”的情况原因是某个 dll 没能注册成 Windows 服务依赖。装完后用下面三条命令做一次快速体检net start w3svc netstat -ano | findstr :80 iisreset /restartnet start w3svc手动拉起万维网服务如果服务已经启动命令会提示“请求的服務已启动”这是正常现象。netstat -ano | findstr :80是看 80 端口有没有进程监听正常会看到0.0.0.0:80和LISTENING字样。如果端口没监听先执行iisreset /restart让 IIS 重新加载元数据库再看事件查看器里有没有 5000 到 5011 号错误。记住一件事IIS 5.1 的安装过程中最不该做的就是打开浏览器反复刷http://localhost。只要端口没起来刷再多次也是白费先回到命令窗口看服务状态。4. IIS 5.1 装不上的血泪避坑五条典型翻车与对应解法4.1 报“无法复制 dll”换完整包仍失败现象组件向导提示复制jscript.dll失败已经把源路径指向完整包的i386但再次安装时依旧报同样的错像是“记住了”之前的路径。原因Windows 文件保护机制在中间拦截。精简系统把dllcache里的备份删了组件向导复制新文件时会触发系统文件保护弹窗选择“保留现有文件”后安装继续但相关组件其实没有被正确注册。另外某些安全卫士常驻进程会锁定system32下的 dll复制操作被拒绝。解决安装前先退出安全软件不是最小化到托盘而是右键退出整个进程。然后打开C:\WINDOWS\system32\dllcache确认目录存在不存在就新建一个再执行安装。这个空目录能给文件保护一个落点避免它在复制 dll 时找不到目标直接中断。做完这两步再走一次组件向导基本能过。4.2 装完管理工具里没有 Internet 信息服务现象组件向导显示安装成功控制面板的“管理工具”里却找不到“Internet 信息服务”快捷方式。原因iis_inetmgr组件没勾上。很多精简系统默认列表里看不到这个子项只装了iis_common和iis_www服务能跑但没有管理界面。解决回到“添加/删除 Windows 组件”双击“Internet 信息服务”把“Internet 信息服务管理单元”勾上完成安装。如果勾选后仍然没有快捷方式说明inetmgr.dll这个 MMC 管理单元没注册成功在命令行执行regsvr32 /s %WINDIR%\system32\inetsrv\inetmgr.dlls参数表示静默注册成功不弹窗。注册完后重新打开“管理工具”图标就会出现。这里常见的误区是去下载独立的 inetmgr.exeIIS 5.1 的管理工具从来不是独立程序它就是 MMC 的一个管理单元没有 exe 文件。4.3 静态页面正常、ASP 一律返回 500.100现象http://localhost能看到 IIS 默认欢迎页但放一个最简单的test.asp进去访问却报 HTTP 500.100。原因脚本引擎 dll 缺失或版本不匹配。精简系统常用高版本系统的jscript.dll覆盖 XP 原版IIS 5.1 的 asp.dll 调这个引擎时接口不兼容。这时候系统里不缺 dll缺的是版本一致的 dll。解决先确认两个引擎文件的版本再决定要不要替换。wmic dllfile where nameC:\\WINDOWS\\system32\\jscript.dll get version wmic dllfile where nameC:\\WINDOWS\\system32\\vbscript.dll get version对照完整包里同名文件版本不一致就把包里的版本覆盖回去。替换前先把现有文件复制一份到C:\backup_dll留后悔药。覆盖后执行iisreset /restart让 IIS 重新加载。注意别用“dll 修复工具”自动处理那些工具倾向于扫描注册表后把缺失项指向高版本 dll对 IIS 5.1 来说版本越高越容易出问题。4.4 访问目录弹登录框IUSR 账户权限失效现象站点能打开首页但访问某个子目录时浏览器弹出用户名密码框或者直接报 401.1 未授权。原因匿名访问账户IUSR_机器名没有该目录的 NTFS 读取权限。IIS 5.1 默认匿名访问用的是这个账户目录权限被改过或 Ghost 系统没建好该账户时就会回退到询问凭据。解决查看目录属性 → 安全选项卡把IUSR_机器名加进去并给“读取”权限。再用管理工具打开站点属性 → 目录安全性 → 匿名访问和身份验证控制确认“匿名访问”是勾选状态。命令行方式也可以加权限cacls C:\Inetpub\wwwroot\protected /T /G IUSR_机器名:R/T表示应用到所有子目录/G是赋予权限R是读取。这里机器名一定要写对写错了cacls会提示找不到用户不报错但也不生效。4.5 网上的 dll 修复工具越修越乱系统开始连环报错现象为了修 IIS 的 dll 问题用某“dll 修复工具”全盘扫描后IIS 的报错确实变了但 iTunes、Office 甚至资源管理器开始弹“找不到指定的模块”或“无法定位程序输入点”。原因修复工具不区分软件版本把扫描到的所有旧版 dll 全部替换成它自带的高版本导致其他应用调用了不兼容的导出函数。这类问题升级成“修复工具引入的新 dll 冲突”比原来的缺失更难排查。解决只能按文件粒度回滚。把完整包里的同名文件按原路径覆盖回去并逐次执行iisreset /restart验证。每替换一个 dll 就重启一次 IIS不要一次全量覆盖。我自己处理过最严重的一回是工具把version.dll也换掉了导致系统里所有调用版本资源的应用全部报错最后是从另一个同配置的 XP 机器上整体拷贝才恢复。从那以后我给任何老系统做 IIS 相关操作都先备份system32下所有要动的 dll。5. 装完后的全功能验证ASP 脚本、元数据库与运行时组件5.1 三步验证服务、端口、默认页面装完不要急着交付先按顺序验证三件事。第一步确认W3SVC服务是在运行状态第二步确认 80 端口有监听第三步用浏览器访问http://localhost/iisstart.asp。注意必须是访问这个默认 ASP 页面不是访问localhost根路径。根路径在 IIS 5.1 里默认启用目录浏览能看到文件列表但看不出来 ASP 引擎是否工作。sc query w3svc netstat -ano | findstr :80sc query w3svc输出里找STATE一栏正常显示RUNNING。如果服务没跑起来先用第四章里的iisreset /restart拉一次。服务状态正常、端口也有监听、但页面打不开问题多半在 hosts 文件或防火墙XP 的防火墙默认会拦外部对 80 端口的访问本机访问一般没事远程被访问时要到防火墙设置里给 TCP 80 加例外。5.2 ASP 机能验证一段写入就能跑的探测脚本只跑默认页还不够IIS 5.1 最常出问题的是脚本引擎和 FSO 组件。我习惯在站点根目录放一个探测页访问一次就把几条关键结论输出到浏览器上。% Response.Write(p脚本引擎: OK/p) Response.Write(p服务器时间: Now() /p) Dim fso Set fso CreateObject(Scripting.FileSystemObject) Response.Write(pFSO 组件: OK/p) Set fso Nothing %把这个文件保存为probe.asp放到C:\Inetpub\wwwroot下浏览器访问http://localhost/probe.asp。能看到三行输出说明 ASP 引擎、VBScript 脚本引擎和文件系统组件都正常。只看到前两行、第三行报“ActiveX 组件不能创建对象”说明 FSO 组件被精简掉了要在组件服务里手动注册 scrrun.dll。更稳的探测方式是看一眼脚本引擎的版本因为 IIS 5.1 对jscript.dll的版本敏感reg query HKLM\SOFTWARE\Microsoft\Windows Script Host /v Version显示出的版本号应该和完整包里system32\jscript.dll的文件版本一致。不一致就按第四章 4.3 的方式替换。这一条是最容易漏的ASP 页面能输出但脚本逻辑涉及正则表达式或 JSON 解析时偶发崩溃多半就是脚本引擎版本混用导致的。5.3 dll 完整性复查与元数据库备份给“后悔药”留好验证完功能最后一步是备份元数据库。IIS 5.1 的站点配置、应用映射全在MetaBase.bin里这个文件损坏等于整个配置归零。备份用 IIS 自带的adsutil.vbs脚本不要直接复制文件——直接复制时 MetaBase.bin 处于写入状态复制出来可能是坏的。cscript C:\Inetpub\AdminScripts\adsutil.vbs backup IIS51_BASE cscript C:\Inetpub\AdminScripts\adsutil.vbs enum W3SVC第一条命令把当前配置整个备份到系统状态缓存里备份名IIS51_BASE自己定。第二条命令枚举站点列表正常会看到W3SVC以及下面的1默认站点确认元数据库可读写。需要恢复时执行adsutil.vbs restore IIS51_BASE。这边要强调一个边界adsutil.vbs backup备份的是 IIS 配置不是wwwroot里的网页文件。网页文件属于站点内容用xcopy /E /H /R单独做文件备份。如果你接手的环境是从 Ghost 盘来的C:\Inetpub\AdminScripts目录很可能不存在那就先补全这个目录否则后面没法做配置级备份。6. 进阶把整套环境固化成可复用模板下次再装只需十分钟环境验证通过之后我习惯再做一次固化把“能用”变成“可复制”。所谓固化就是造一个自己的安装模板一份build.bat一份站点基线目录外加一份版本记录。下次再拿到一台类似的老机器复制模板进去十分钟交付。echo off set BASEC:\IIS_TEMPLATE xcopy %BASE%\wwwroot C:\Inetpub\wwwroot /E /I /Y cscript %WINDIR%\system32\inetsrv\adsutil.vbs set /W3SVC/1/ServerComment ASTest cscript %WINDIR%\system32\inetsrv\adsutil.vbs set /W3SVC/1/Root/AspEnableParentPaths True cscript %WINDIR%\system32\inetsrv\adsutil.vbs set /W3SVC/1/Root/DefaultDoc default.asp,index.asp,default.htm iisreset /restart这段脚本做的事情分别是把模板里的站点内容复制到标准站点目录、修改站点注释、开启 ASP 相对父路径支持、把默认文档顺序调成 ASP 优先。AspEnableParentPaths如果不打开ASP 里使用../相对路径会直接报错这是老项目最常见的适配项。ServerComment是站点在管理工具里显示的名字按项目名修改即可。固化的关键不是脚本本身而是版本记录。我在模板里放一个readme.txt写清楚这台环境用了哪个版本的jscript.dll、asp.dll以及哪些文件是手动覆盖过的。没有这份记录下次排障时你不知道这台机器跟原版到底差在哪。从那以后我每交付一台 IIS 5.1 环境都强制走一遍“备份元数据库 固化脚本 写版本记录”的流程缺一项都算没交付完。这套方法在 XP 老环境上帮我少加了不少夜班希望也能帮到你。本文还有配套的精品资源点击获取
返回列表