☰
SMC单机版视讯会议管理系统9%安装失败排查指南
2026/10/27 2:03:36 网站建设 项目流程

简介:面向华为视讯管理系统SMC2.0的实施与运维人员,这份Word文档聚焦单机部署前的操作系统和数据库环境准备,帮助读者按Windows Server 2012 R2、2016、2019三种平台搭配对应SQL Server Express版本完成安装、升级与基础配置。内容按环境组合展开,涵盖标准版系统安装、SQL Server Express部署、数据库管理工具使用,以及从SQL Server 2008 Express升级至2014 Express的数据迁移与兼容性验证;另设典型安装升级失败FAQ,涉及系统不支持、安装进度9%报错、.NET Framework与VC运行库缺失、BCP路径异常、证书导入失败、数据库连接超时等场景,并提供排查思路。资源包仅含1个docx文件,大小约11.66MB,目录层级清晰,便于按版本和故障现象检索。已有752人学习,适合需要规范化搭建SMC2.0单机环境、减少重复排错的中初级实施运维人员参考。

1. 装到 9% 就停:单机版视讯管理系统为什么总在同一个位置翻车

装单机版视讯会议管理系统(下文按安装包前缀简称 SMC),最让人抓狂的不是哪一步参数填错,而是进度条永远停在 9%。前面选目录、选组件、点下一步都很顺,一到 9% 就弹框,有时说系统加固失败,有时说计算机名和登录用户名一致,有时干脆什么都不说直接回滚重来。折腾两三个小时,机器上留下一堆半装状态的服务和注册表项,越装越乱。

这类故障的共同点是:9% 之前安装程序只做文件释放,9% 之后才开始动操作系统底层——写安全策略、装 VC 运行库、起服务、连数据库、导证书。环境只要有一项没对齐,全部集中在这一步爆出来,而且报错文案各不相同,很容易误判成"安装包坏了"。这篇就是把这串报错按现场顺序拆开,每一类说清楚触发条件、根因、怎么改、改完怎么验证,照着做能少走几轮重装。

2. 环境对表:操作系统、数据库版本与补丁怎么配才不会返工

SMC 单机版是把应用、数据库、管理工具塞在同一台机器上的部署形态,它和"应用装一台、数据库装一台"的最大区别是:所有版本约束都压在一个操作系统上,任何一层不满足,安装程序在预检查阶段就会拦你,或者更糟——放你过去,到 9% 再翻车。所以我每次动手前的第一件事不是双击安装包,而是把操作系统版本、补丁级别、数据库版本、管理工具版本四样东西列成一张表,逐项打勾。这一步多花十分钟,能省掉后面两小时的重装。

2.1 三套推荐组合与它们各自的前置条件

安装指导里给出的推荐组合有三套,分别对应三个时代的 Windows Server。选哪套不是看机器新旧,而是看你的 SMC 版本支持到哪一档,以及现场有没有现成的操作系统镜像。

操作系统数据库适用说明
Windows Server 2012 R2 标准版SQL Server 2014 Express SP2存量环境最多的一套,补丁链最长,升级路径也最完整
Windows Server 2016 标准版SQL Server 2016 Express SP2安全特性更全,注意 Windows Update 策略会干扰安装
Windows Server 2019 标准版SQL Server 2019 Express新装机首选,数据库功能最全,但对旧版 SMC 兼容性要先确认

三套组合有几条共同的前置条件,漏一条都可能让安装在中途停住。第一是磁盘,系统盘建议不少于 80 GB,安装程序会往 C 盘写临时文件、数据库文件、证书和日志,空间不够时表现出的不是"磁盘不足"这种明确报错,而是各种莫名其妙的写入失败。第二是语言,数据库的排序规则和语言必须和操作系统语言保持一致,中文系统配英文数据库实例,后面建库时排序规则冲突的概率很高。第三是补丁,操作系统补丁必须按顺序逐个双击安装,中途提示重启就先重启再继续,补丁文件所在路径不能带中文字符。

# 确认系统版本、构建号和补丁级别,先确认自己在哪一档 Get-ComputerInfo | Select-Object OsName, OsVersion, OsBuildNumber # 查看系统盘可用空间,低于 80 GB 建议先扩盘再动手 Get-PSDrive C | Select-Object @{n='FreeGB';e={[math]::Round($_.Free/1GB,1)}}

第一条命令输出里的 OsName 是营销名称,OsBuildNumber 才是判断补丁级别的依据,比如 Windows Server 2012 R2 的初始构建号是 9600,打完 KB2919355 之后会变。第二条命令只看可用空间,不看总容量——很多人拿一块 100 GB 的盘分区给 C 盘 60 GB,总容量看着够,可用空间不够,一样会在安装中途失败。

补丁安装过程中有两个"假报错"要认出来:提示 "The update is not applicable to your computer" 或者 "xxxx is already installed on this computer",说明这个补丁要么不适用于当前架构,要么已经装过了,直接跳过装下一个,不用去查资料。全部补丁装完必须重启一次,让待生效的更新落地,否则安装程序读到的还是旧的组件版本。

2.2 报"SMC 不支持当前操作系统"时,该怎么核对版本

这个报错是安装预检查阶段最常见的一条,也是最容易被误判的一条。很多人看到它第一反应是"我装的明明是 Windows Server 2016 啊",然后开始怀疑安装包。实际上安装程序判断的从来不是"Windows Server 2016"这几个字,而是四个维度同时比对:主版本号、版本类型(标准版 / 数据中心版)、安装选项(带 GUI 还是 Server Core)、补丁级别。

最容易踩的两个坑,一个是 Server Core。安装镜像里有两个选项,"Server Core Installation" 是纯命令行、没有桌面,选它装完是没有图形界面的,SMC 的安装向导根本起不来,表现出来就是各种"不支持"。必须选 "Server with a GUI",也就是带桌面的服务器安装。另一个是版本类型,标准版和数据中心版在功能上差别不大,但支持矩阵里写的往往只有标准版,遇到数据中心版被拦下来,要么换镜像,要么按现场支持范围确认清楚再装。

# 三个值要一起看:版本类型、安装类型、当前构建号 (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').EditionID (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').InstallationType [System.Environment]::OSVersion.Version

EditionID 返回 ServerStandard、ServerDatacenter 这类值,InstallationType 返回 Server 或 Server Core,这两个值一组合,就能判断出你这台机器到底在不在支持列表里。如果是 Server Core,唯一的解法是重装系统选带 GUI 的版本——没有后悔药,Server Core 加装图形界面在服务器版上是不支持的。如果版本类型对、安装类型也对,那问题就落在补丁级别上,把补丁按顺序补齐再试。

2.3 SQL Server 与管理工具安装时的两个必看检查项

数据库这一层的安装,绝大部分步骤保持默认就行,但有两处必须停下来看一眼,它们直接决定后面 SMC 能不能连上。

第一处是"安装规则检查"界面里的防火墙状态。如果这一项显示"警告",说明机器防火墙没关,此时直接点下一步,后面大概率会在连接数据库那一步超时。正确做法是关掉防火墙,然后点"重新运行",直到防火墙状态变成"已通过"再继续。这个动作很多人会跳过,理由是"我本地连又不走网络",但安装程序用的是 TCP 连接,防火墙规则一样会拦。

第二处是"数据库引擎配置",这里必须选混合模式登录,并给 sa 账户设一个符合复杂度要求的密码。选成"仅 Windows 身份验证"的话,安装能过,但 SMC 的应用服务用 SQL 账户连库时会直接被拒,报出来的错误是登录失败,排查方向会被带偏到账号权限上。sa 密码按规范设置,长度 8 位以上、含大小写和符号,别用纯数字,也别带中文字符;指导文档里给的那个示例口令只是演示用,现场部署一定要改掉。

# 2014/2016/2019 Express 的实例 ID 分别是 MSSQL12/MSSQL13/MSSQL14 加 .SQLEXPRESS $inst = 'MSSQL14.SQLEXPRESS' # LoginMode = 1 表示仅 Windows 认证,= 2 表示混合模式 Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$inst\MSSQLServer" -Name LoginMode

如果这一步查出来是 1,不用重装数据库,在 SQL Server 配置管理器里把实例的登录模式改成混合模式,重启实例,然后到 SSMS 里把 sa 启用并设密码即可。改完一定要重启实例,注册表值改了不生效是这个场景里最常见的"改了没用"。

另外提一句管理工具。安装 SQL Server 管理工具(SSMS)时,特性检查有可能报 .NET Framework 3.5 相关的错误代码 0x800F0906 或 0x800F081F,本质是系统里没启用 .NET 3.5 这个可选功能。解法是打开服务器管理器,添加角色和功能,勾选 .NET Framework 3.5,然后在"指定备用源路径"里挂载操作系统的 ISO 镜像,把路径指到镜像里的 sources\sxs 目录,装完再回到安装程序里重新检查就能通过。这一步在离线环境里几乎必踩,提前把 ISO 准备好能省一次返工。

3. 卡在 9%:加固失败、计算机名同名与运行库装不上的解法

9% 这个位置之所以特殊,是因为从这一刻开始,安装程序不再只是往磁盘写文件,而是开始调用操作系统 API 去改配置、装依赖、起服务。任何一个调用失败,整个安装就会回滚或者挂起。这一章的四类报错,占了现场故障的大头,而且它们的报错文案都不带"9%"字样,很多人是装完之后才反应过来"哦,就是卡在 9%"。

3.1 9% 报"无法在当前操作系统应用系统加固"

系统加固指的是安装程序按内置的安全基线去改本地安全策略:密码复杂度、账户锁定阈值、审核策略、部分注册表权限。它失败的原因不是安装包有问题,而是当前系统的策略状态和基线对不上,改不动。

最常见的三种情况:一是操作系统补丁没打齐,基线里要写的某个策略项在当前版本上字段结构不一样,写入直接失败;二是机器加入了域,域的组策略每 90 分钟刷新一次,安装程序刚改完,组策略一刷新又覆盖回去,表现出来就是改完立刻失败;三是有人手工动过本地安全策略,把某些项设成了"未定义"或者一个基线不认的值。

# 导出当前本地安全策略,和安装包里的基线文件对比差异 secedit /export /cfg C:\temp\local_baseline.inf /areas SECURITYPOLICY # 查看密码策略、账户锁定策略这几段,重点看是否被域策略接管 Select-String -Path C:\temp\local_baseline.inf -Pattern 'Password|Lockout|MinimumPassword'

导出之后重点看有没有被域策略覆盖的痕迹。判断方法很简单:把机器临时退出域(或者拔掉网线、停掉域控连通),再跑一次安装,如果这时候 9% 能过,那就百分百是组策略冲突。现场的临时处理是断开域连接再装,装完重新加域;长期处理是把这条加固基线纳入域策略,避免两边打架。补丁级别的问题只能靠把补丁按顺序补齐来解决,没有捷径。

3.2 9% 报"计算机名和当前登录用户名一致"

这条报错文案看着很无厘头,但它确实是安装失败的直接原因。安装程序在创建数据库登录名和服务账户时,会把当前登录的管理员用户名作为标识之一拼进去,如果计算机名和这个用户名完全相同,拼出来的两个标识就撞了,脚本执行时直接抛错。

现场很容易撞上:装机的时候图省事,计算机名起成 Administrator,登录账户也是 Administrator;或者反过来,用某个业务名做计算机名,又建了个同名管理员账户。改法有两个,任选其一:改计算机名(推荐,改完必须重启),或者换一个不同名的管理员账户登录再装。

# 当前计算机名 $env:COMPUTERNAME # 当前登录账户(去掉域名前缀) (whoami).Split('\')[-1] # 列出所有本地管理员,找一个和计算机名不同的来装 Get-LocalGroupMember -Group Administrators | Select-Object Name

改计算机名之后一定要重启,不重启的话很多组件缓存的还是旧名字,安装程序读到的值不会变。另外提醒一点,计算机名不要用中文、不要带特殊字符、不要超过 15 个字符,这几个限制在数据库和服务的命名上会一路传下去,后面改起来非常麻烦。

3.3 Install VC2017 x86 depend files 失败

这条报错通常出现在加固步骤之后,安装程序开始装它自带的 VC++ 2017 运行库时失败。注意关键词是 x86——即使你的操作系统是 64 位,安装程序依赖的某些组件仍然是 32 位的,必须装 x86 版本的运行库,只装 x64 版本不管用。

失败的常见原因有四个:机器上已经有更高版本的 VC 运行库,安装程序判定冲突;Windows Update 服务被禁用,运行库安装包依赖它去校验组件存储;系统缺少某个前置补丁,安装包直接拒绝执行;以及杀毒软件把安装包释放出来的临时 exe 拦了。

# 查已安装的 Visual C++ 运行库版本,重点看 2017 x86 在不在 Get-ItemProperty HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object { $_.DisplayName -like '*Visual C++ 2017*' } | Select-Object DisplayName, DisplayVersion

如果列表里已经有 VC++ 2017 x86 但版本比安装包要求的高,一般可以跳过这一步继续装,很多时候后续步骤并不会真的用到。如果列表里没有,最稳的做法是去微软官网单独下载 VC++ 2017 x86 可再发行组件包,手工装一遍,装完重启,再重新跑 SMC 安装程序。手工装的好处是失败的时候有明确错误码,而不是被包在安装程序里只给一句"depend files 失败"。另外确认一下 Windows Update 服务和 Windows Modules Installer 服务是启动状态,这两个服务被优化脚本关掉的情况在交付现场非常普遍。

3.4 报"The net service has not been started, please check!"

这条报错的字面意思很直接:某个 net 相关的服务没起来。但它指向的服务名不唯一,需要按顺序排除。

首先查 Server 服务(服务名 LanmanServer),这是文件共享服务,安装程序在释放文件和写共享目录时依赖它,被安全基线或者优化脚本禁用的情况最多。其次查 NetTcpPortSharing,这是 WCF 的端口共享服务,SMC 的服务端通信组件有一部分走这个。最后才怀疑 .NET 本身,如果 .NET Framework 装得不完整,相关的服务注册项根本不存在,表现出来也是"服务没起来"。

# 三个候选服务逐个看状态和启动类型 Get-Service -Name LanmanServer, LanmanWorkstation, NetTcpPortSharing -ErrorAction SilentlyContinue | Select-Object Name, Status, StartType # 手动拉起并设为自动 Set-Service -Name LanmanServer -StartupType Automatic Start-Service -Name LanmanServer

处理完之后不要直接点"重试",把安装程序完全退出去再重新启动,让它的服务状态检查从头跑一遍。有些现场是服务能起来,但启动类型是"手动",安装程序判断时看的是启动类型,一样会拦。这类环境通常是被人跑过一轮"服务器安全加固脚本",把几十个服务统一设成了禁用,遇到这种情况建议先还原一份干净的系统再装,比逐个排查快得多。

4. 反复重启与找不到文件:安装中途停下来的四种现场

第 3 章讲的是安装程序主动报错,这一章讲的是更难受的一类:它不报错,就是不往前走。有的是机器反复重启,重启完从头再来;有的是卡在某个进度一动不动;有的是到最后一步失败,日志里只留下一句"找不到文件"。这类问题的排查难度在于,现象和行为之间隔了一层,你得先搞清楚安装程序在等什么资源。

4.1 安装过程中不断重启

循环重启是最好认也最费时间的一种:装到某一步,机器自动重启,重启后安装程序又重新开始,装到同一步又重启。放着不管能循环一整天。

根因基本只有一个:安装包同级目录下缺少它需要的依赖安装包,安装程序找不到,就按"这部分没装成"处理,把机器重启一次再试,结果还是一样。这份指导文档里明确列了两项:.NET Framework 4.7.2 离线安装包和 SQL Server 2014 Express SP2 安装包。安装程序在启动时会去约定的目录下找这两个包,找不到就自己触发重启流程。

# 查 .NET Framework 4.x 的 Release 值,461808 = 4.7.2、461814 = 4.7.2(其他OS)、528040 = 4.8 $rel = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release).Release "当前 .NET 4.x Release = $rel" # 查 SQL Server Express 实例是否已存在 Get-Service -Name 'MSSQL*' -ErrorAction SilentlyContinue | Select-Object Name, Status

处理方式是把这两个离线包下载好,放到安装包目录下约定的位置(一般和主安装程序同级),文件名不要改,然后手工先装一遍 .NET 4.7.2,重启,再装 SQL Server Express,再重启,最后跑 SMC 安装程序。手工先装的好处是能提前暴露这两个组件自身的安装问题,而不是被包在 SMC 安装流程里来回重启。Release 值小于 461808 就说明 .NET 版本不够,别凭"我记得装了"下判断。

4.2 BCP 不是默认路径导致安装失败

BCP 是 SQL Server 自带的批量导入导出工具,安装程序在校验数据库可用性时的一部分逻辑,会直接调用 bcp 命令去做一次小规模的数据往返测试。调用方式是裸写 bcp,不走绝对路径,依赖的是系统的 PATH 环境变量。

如果安装 SQL Server 时改了默认安装路径,bcp.exe 就不在 C:\Program Files\Microsoft SQL Server\120\Tools\Binn 下面了,PATH 里也没有它,安装程序一调就失败,报错内容通常只说"数据库校验失败"或者干脆是别的错误,很容易被带偏。

# 看 bcp 能不能直接调起来 where.exe bcp # 查 SQL Server 的实际安装根目录 Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL' | Select-Object MSSQLSERVER, SQLEXPRESS

where.exe bcp没有输出,就说明 PATH 里没有。两种改法:把 bcp.exe 所在目录加进系统 PATH(推荐,一劳永逸),或者把 bcp.exe 及其依赖的几个 dll 复制到默认路径下。改完之后要重新开一个命令行窗口验证——PATH 是进程级快照,已经打开的窗口读不到新值,这是这一步最常见的"改了没生效"。改完再重启安装程序,它启动时会重新读环境变量。

4.3 提示访问安装目录下的文件夹失败

现象是安装到某一步,弹出访问某个文件夹被拒绝,文件夹名字看着像安装包解压出来的二级目录,路径里往往带着空格或者特殊字符。

原因集中在三处。一是解压路径本身有问题,装上桌面的安装包解压在"新建文件夹 (2)"这种带括号和空格的路径下,安装程序的某些脚本对路径转义处理不严,解析出错。二是权限,安装程序切换到了一个权限较低的服务账户去写文件,而这个目录的 ACL 没给它写权限。三是杀毒软件实时防护把安装程序释放的临时文件锁住了,写不进去。

# 把安装包放到纯英文、无空格的短路径下,比如 C:\smc_install New-Item -ItemType Directory -Path C:\smc_install -Force # 查看目录 ACL,确认 SYSTEM 和 Administrators 有完全控制 icacls C:\smc_install # 如有必要,给 SYSTEM 补上完全控制 icacls C:\smc_install /grant 'SYSTEM:(OI)(CI)F' /T

最省事的做法其实是第一条:把安装包挪到 C:\smc_install 这种路径下重新解压再装,很多"权限问题"根本不是权限问题,就是路径太花。挪之前先把杀软的实时防护暂停,装完再开回来,并把安装目录加入白名单,避免装完之后运行期又被拦。

4.4 连接数据库超时、提示登录超时

这条报错出现在安装后期,安装程序要连上刚装好的 SQL Server 实例建库建表,连不上就超时。它和 2.3 节的防火墙检查是同一类问题在不同阶段的表现,但排查面更宽。

按顺序查四件事。第一,实例的 TCP/IP 协议有没有启用,Express 版默认是禁用的,必须去配置管理器里手动打开并重启实例。第二,SQL Browser 服务有没有起,named instance 靠它把 1433 之外的动态端口告诉客户端。第三,防火墙有没有放行,或者干脆关掉。第四,认证模式和安全连接,混合模式没开、sa 被禁用、密码里带特殊字符导致连接串解析失败,都会落到同一个"登录超时"上。

# 直连实例名,验证通道是否通 Test-NetConnection -ComputerName 127.0.0.1 -Port 1433 # 用 sa 连接并跑一条最简单的查询,验证认证模式 sqlcmd -S 127.0.0.1\SQLEXPRESS -U sa -P "<你的sa密码>" -Q "SELECT @@VERSION" -l 10

第一条命令看 TcpTestSucceeded 是不是 True,不通就说明协议或端口有问题,先别去查账号。第二条命令如果报"用户登录失败",说明网络是通的、认证模式或密码有问题;如果直接报超时,说明网络层就没通。这个二分法能把排查范围一次性砍一半,比在日志里翻来翻去快。sqlcmd 命令里的 -l 10 是把登录超时设成 10 秒,默认值是 30 秒,装现场等三次就十分钟没了。

5. 升级阶段的避坑清单:五个最容易翻车的环节

全新安装和版本升级是两套完全不同的难度。全新安装面对的是空白系统,失败了大不了重装;升级面对的是已经在跑业务的库,动之前得留后路,动完之后还得验证数据没丢。这份指导文档里列出的升级类报错有七八条,我把现场命中最高的五条拎出来,每条按"现象、原因、怎么解"三段说清楚。

5.1 坑一:升级过程中弹出输入认证密码框

现象是升级向导跑到某一步,突然弹出一个输入认证密码的框,界面上没有任何说明,密码填什么都过不去,点取消则整个升级回滚。

原因基本是升级前的那台机器,SMC 内部的服务间通信凭据还是旧版本生成的,升级程序需要它来接管已有的数据库连接,但凭据文件和当前环境对不上。常见触发场景是升级前改过管理员密码、改过计算机名,或者把安装目录整体复制到过另一台机器。

处理办法是不要在这个框里瞎试密码。退出升级程序,用安装用户(必须和最初安装时的账户一致)重新登录系统,确认 UAC 关闭,再以管理员身份启动升级程序。如果还弹,说明凭据文件已损坏,按指导文档里的处理方式,先把数据库完整备份,再用新版本安装包做一次"覆盖安装 + 数据恢复",而不是硬走升级路径。备份这一步不要省,升级出问题至少有回头路。

5.2 坑二:SMC 数据库状态和文件状态不一致

现象是升级前的环境检查报"数据库状态和文件状态不一致",或者升级完成了但登录进去发现部分配置丢失。

原因是有两处状态记录:一处存在数据库里,一处存在安装目录下的配置文件里,两者本应同步。手工改过配置文件、数据库被还原过、或者上次升级中途失败回滚不彻底,都会让两边对不上。

处理方式是先只读比对,不动手。连上数据库查一遍当前版本号和配置项,再去安装目录下看对应配置文件里的版本号,两个值不一样就是这个问题。修复的原则是以数据库为准,把配置文件按数据库里的值手工对齐,然后重启 SMC 的所有服务再跑升级。绝对不要反过来改数据库去迁就配置文件,那是拿数据开玩笑。

5.3 坑三:执行脚本 ViewAndStoredprocedure.sql 失败、创建数据库失败

现象是升级到执行脚本这一步,报执行 ViewAndStoredprocedure.sql 失败;或者初始化阶段直接报创建数据库失败。这两个报错经常成对出现,因为后者往往是前者的结果。

原因是数据库连接用的账户,权限不够建视图和存储过程。升级程序默认用 sa 或安装时配置的账户去连,如果中途有人改过 sa 密码、禁用过 sa,或者把数据库的所有权改到了别的登录名下,脚本执行就会被拒。

-- 先确认当前连接身份和数据库所有权 SELECT SUSER_SNAME() AS 当前登录, DB_NAME() AS 当前库; SELECT name, SUSER_SNAME(owner_sid) AS 数据库所有者 FROM sys.databases WHERE name = 'SMC';

如果当前登录不是预期账户,说明升级程序读到的连接串和你以为的不一样,去检查配置文件里的数据库连接配置。如果数据库所有者不是 sa,用 ALTER AUTHORIZATION 改回来再跑升级。另外注意 ViewAndStoredprocedure.sql 这类脚本执行失败时,日志里通常只给第一行错误,后面全是级联失败,别逐条去查,只查第一条。

5.4 坑四:安装或升级过程中导入证书失败

现象是导入证书这一步直接报错,升级中断,回滚。

证书导入失败的原因比想象中多:证书文件被杀软隔离、证书文件所在目录权限不足、证书已经过期、证书链不完整(中间证书缺失)、系统时间被改到了证书有效期之外。最后这个最隐蔽,现场有人为了绕开某些授权校验把系统时间调前了两年,结果证书校验直接失败。

处理顺序是先看系统时间对不对,再看证书有效期,再看证书链。用 certutil 把证书信息打出来,一眼就能看到有效期和颁发链。证书过期或者链不完整,只能换证书,改不出来。文件本身没问题的话,把证书导入到"受信任的根证书颁发机构"和"个人"两个存储区,别只导一个。

5.5 坑五:升级卡在导入证书环节不返回

现象和上一条不同:不报错,进度条停在导入证书,十几分钟没动静,CPU 和磁盘都不忙。

原因是证书链校验时去联网查 CRL(证书吊销列表),而现场机器不通外网,也不通内网的 CRL 发布点,系统就在那里一直等超时,超时时间默认很长,表现出来就是卡死。

处理办法是在证书导入前,先把系统的"检查服务器证书吊销"关掉,或者给机器配一个能到达的 CRL 地址。现场的临时做法是断开网络再导入——断网后系统找不到 CRL 服务器会快速失败并跳过,而不是傻等。导入完成后再恢复网络。这个坑的恶心之处在于它没有任何错误信息,你不知道它在等什么,所以升级前把网络策略确认一遍,比事后猜快得多。

6. 快速定位:三分钟判断卡在环境、服务还是数据库

装多了会发现,这几类故障其实可以按"层"来分:最上面一层是操作系统和版本,中间一层是服务和运行库,最下面一层是数据库和证书。报错文案几乎不告诉你它在哪一层,但你可以用一组固定命令,三分钟内把范围砍到一层,再往下查。

我习惯的顺序是这样的:先看系统版本、补丁、磁盘这三项,任何一项不达标立即停手,不用往下查;再看 .NET 版本、VC 运行库、三个关键服务的状态;最后看数据库实例、1433 端口、sa 是否可用。这三步对应三个不同的责任人,环境问题找装机的人,服务问题自己解决,数据库问题找 DBA 或者重装数据库。

排查层检查项典型报错
操作系统层版本类型、安装类型、补丁构建号、C 盘可用空间不支持当前操作系统、无法应用系统加固
组件与服务层.NET 4.7.2、VC++ 2017 x86、Server 服务、NetTcpPortSharingdepend files 失败、net service 未启动
数据库与证书层实例状态、TCP/IP 协议、1433 端口、混合认证、证书有效期登录超时、创建数据库失败、导入证书失败
# 一段脚本把三层的关键值全打出来,装现场直接复制粘贴 $os = Get-ComputerInfo | Select-Object OsName, OsBuildNumber $rel = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release).Release $svc = Get-Service LanmanServer, NetTcpPortSharing -ErrorAction SilentlyContinue $sql = Get-Service -Name 'MSSQL*' -ErrorAction SilentlyContinue $port = Test-NetConnection -ComputerName 127.0.0.1 -Port 1433 -WarningAction SilentlyContinue [pscustomobject]@{ OS名称 = $os.OsName 构建号 = $os.OsBuildNumber NET版本 = if ($rel -ge 461808) { '4.7.2 及以上' } else { '不满足,需升级' } 计算机名 = $env:COMPUTERNAME 登录账户 = (whoami).Split('\')[-1] 关键服务 = ($svc | ForEach-Object { "$($_.Name)=$($_.Status)" }) -join '; ' 数据库服务 = ($sql | ForEach-Object { "$($_.Name)=$($_.Status)" }) -join '; ' 1433通不通 = $port.TcpTestSucceeded } | Format-List

这段脚本的价值不在于它多复杂,而在于它把三层的判断标准固化下来了,不用每次凭记忆一个个查。其中 NET版本 那个判断用的是 461808 这个分界值,低于它的机器不用往下看,先装 .NET 再谈别的;1433通不通 为 False 的时候,所有"登录失败"类的报错都要先当网络问题处理,别一上来就去改账号权限。计算机名和登录账户两个字段放在一起,就是为了当场看出 9% 那条同名报错。

踩过几次坑之后,我现在拿到一台机器,不管装什么版本,都会先跑一遍这套检查,把输出存成一份 txt 放在安装目录旁边,装完再跑一遍对比。血泪经验是:你永远记不清装之前那个构建号是多少,而事后想回溯的时候,那台机器已经被改得面目全非了。留一份装前基线,比任何日志分析工具都管用。希望这套顺序能帮到你,下一次再看到 9% 停住的时候,不用从头开始猜。

本文还有配套的精品资源,点击获取

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

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

立即咨询