简介:面向华为视讯会议系统实施与售后运维人员的SMC2.0部署文档,针对单机环境下操作系统、数据库版本不匹配易导致安装失败的问题,给出从环境准备到升级排错的完整参考,适合具备Windows Server基础的工程师使用。压缩包内仅有1个docx文件,大小11.66MB,以图文步骤和分级目录组织,可按章节快速检索。文档分别围绕Windows Server 2012 R2搭配SQL Server 2014 Express SP2、Windows Server 2016搭配SQL Server 2016 Express SP2、Windows Server 2019搭配SQL Server 2019 Express三套组合展开,说明系统安装、数据库配置、权限与安全设置、管理工具使用,以及旧版数据库升级所需的数据迁移、备份和兼容性验证。文末按现象汇总18类典型安装升级失败场景,涵盖系统不支持、安装进度卡在9%、VC2017与.NET Framework依赖缺失、SQL安装包未携带、证书导入失败、数据库连接超时等,并附操作系统与SMC推荐版本对照。已有752人学习下载,可帮助读者减少试错,快速定位部署与升级故障。
1. 单机部署的第一道坎,往往不在 SMC 本身
装 SMC2.0 单机版这件事,我前后跟过十几套环境,说句实话,栽跟头的十次里有八次不在应用上,而在底下的操作系统和数据库版本组合上。SMC2.0 这类视讯会议管理系统对运行底座挑得很死:Windows Server 版本、SQL Server Express 的补丁级别,只要有一项对不上,安装进度条就会卡在 9% 附近给你一个语焉不详的报错。更难受的是它中途会做系统加固和数据库初始化,错一步就得重装系统——我见过一个现场因为选了非标准版镜像,来回重装四遍,折腾掉整整两天。这篇笔记按单机部署顺序,把操作系统、数据库、依赖补丁和失败恢复一条条写清楚,适合自己动手搭测试环境的人,也适合接手存量现场要去救火的人。
2. 版本对照:三套 Windows Server 与 SQL Server Express 组合怎么选
先把组合定死,再动手。这份指导里给的是三套推荐搭配,SMC 安装包在启动时会去读当前操作系统版本和已安装的 SQL Server 版本,对不上就直接拦下来,所以「先装什么版本」不是可选项。
2.1 三套推荐组合与资源要求
| 操作系统 | 数据库 | 适配说明 | 主要代价 |
|---|---|---|---|
| Windows Server 2012 R2 标准版 | SQL Server 2014 Express SP2 | 存量现场最多,老镜像、老硬件首选 | 系统补丁链最长,KB 要按顺序装 |
| Windows Server 2016 标准版 | SQL Server 2016 Express SP2 | 中期过渡环境 | 需注意累积更新策略 |
| Windows Server 2019 标准版 | SQL Server 2019 Express | 新上线环境推荐 | .NET 3.5 离线源要单独指定 |
三套组合共同的硬性要求是:C 盘可用空间不少于 80G,安装介质必须是标准版且带 GUI 的安装项;系统安装阶段大约要 90 分钟,期间会自动重启多次,这不是卡死,别手快去断电。数据库的语言版本要和操作系统语言保持一致,中文系统就装中文版数据库,混装后实例排序规则不一致,后面的建库脚本容易出乱码。
版本对应关系在指导的附录里单独列了一节,值得先翻一遍再动手。它的意思很明确:操作系统版本决定了你能装哪个数据库版本,数据库版本又决定了 SMC 能不能装。三者的匹配是绑死的,不存在「我机器新,装个更高的版本应该也行」这种空间。
2.2 Express 版够不够用,SP2 这个后缀为什么不能省
SQL Server Express 是免费的轻量版,对缓冲池内存和单库容量有硬上限,单机 SMC 的配置库、会场数据、会议记录远小于这个量级,跑起来没问题;真正要注意的是历史 CDR 长期堆积带来的库增长,超限之前得做归档,这一点在部署方案里就要跟需求方讲清楚,别等半年后才发现写不进去。
SP2 这个后缀更不能省。指导里专门有一条故障记录,大意是 SMC 安装包中未携带 SQL Server 2014 Express SP2 安装包,导致安装过程报错。这说明安装程序会去调用指定版本的 SQL Server 安装包,RTM 版或者 SP1 版放在那里,它认不出来。所以下载时认准带 SP2 的完整包,不要图快去装一个「差不多」的版本。同理,Windows Server 2016 对应的是 SQL Server 2016 Express SP2,Windows Server 2019 对应的是 SQL Server 2019 Express,跨版本顶替同样会失败。
2.3 依赖清单:补丁、.NET 4.7.2、VC2017 运行库
Windows Server 2012 R2 那一套的补丁最多,顺序也不能乱。KB2919442 是 KB2919355 的前置,必须先装它,后面几个 KB 才有意义。整条链是:KB2919442 → KB2919355 → KB2932046 → KB2959977 → KB2937592 → KB2938439 → KB2934018,最后补 NDP472-KB4054530 这个 .NET Framework 4.7.2 安装包。
@echo off REM 补丁统一放在 D:\patch,路径里不要有中文和空格 REM 按顺序装;返回 3010 表示需要重启,重启后从下一个继续 set PATCH_DIR=D:\patch for %%f in ( Windows8.1-KB2919442-x64.msu Windows8.1-KB2919355-x64.msu Windows8.1-KB2932046-x64.msu Windows8.1-KB2959977-x64.msu Windows8.1-KB2937592-x64.msu Windows8.1-KB2938439-x64.msu Windows8.1-KB2934018-x64.msu ) do ( echo === installing %%f === wusa.exe "%PATCH_DIR%\%%f" /quiet /norestart echo exit code: %errorlevel% ) REM .NET Framework 4.7.2 单独装,SMC 安装程序强依赖 "%PATCH_DIR%\NDP472-KB4054530-x86-x64-AllOS-ENU.exe" /q /norestart这段脚本的关键点在三个地方:/quiet /norestart让补丁静默安装且不自动重启,避免批量装到一半被重启打断;%errorlevel%要逐条看,3010 是需要重启、0 是成功、2359302 之类表示该补丁已存在;补丁文件必须放在纯英文路径下,指导里明确写了补丁存放路径包含中文字符可能导致无法运行,这条血泪经验不是吓唬人。安装过程中如果弹出「The update is not applicable to your computer」或者「xxx is already installed on this computer」,直接当作已安装,继续下一个,不要反复重试。全部装完重启一次再进下一步。
VC2017 的 x86 运行库也是必装项,SMC 的部分组件是 32 位的,只装 x64 版会在安装中途报 Install VC2017 x86 depend files 失败。
3. 装操作系统:2012 R2 / 2016 / 2019 标准版的安装与加固前准备
3.1 引导与版本选择:带 GUI 的安装项别选错
从安装介质引导后,第一个容易翻车的地方就是安装项选择。以 Windows Server 2012 R2 为例,界面上会出现两个选项:Server Core Installation 是服务器核心安装,没有图形界面;Server with a GUI 是带图形界面的服务器安装。SMC 的安装向导、数据库管理工具、证书导入这些都是图形化操作,一律选带 GUI 的那一项,再加标准版。
选完版本走「自定义安装(Install Windows only)」,不要选升级。升级安装会保留旧系统的注册表残留和挂起的重启标记,后面 SMC 安装阶段很可能出现「安装过程中不断重启」这类症状。全新安装是最省事的路径,测试环境尤其没必要省这一步。
2016 和 2019 的界面把标准版和桌面体验拆得更细,选择时确认「桌面体验」这一项,其它的按默认走就行,不要额外勾选容器、Hyper-V 之类的角色,装完再按需添加,能少一堆干扰。
3.2 分区规划与磁盘清理
到了磁盘选择界面,如果这块盘上已经有分区,先逐个删除,再让安装程序自己重建。指导里的原话是「若系统已存在分区,将其删除」,C 盘给到 80G 以上,剩下空间可以给数据盘单独分区。删除分区这一步看着粗暴,其实是在规避引导分区残留导致的启动异常,比事后修引导省事得多。
分完区依次格式化,然后点下一步开始复制文件。这个阶段大约 90 分钟,中途会自动重启几次,全程不要插 U 盘、不要按电源键。装完第一件事是设置管理员密码,密码策略按现场规范来,但别用纯数字,SMC 后续调用系统账户做服务登录时会受组策略影响。
3.3 补丁按顺序装:KB2919442 必须排第一
系统起来之后先别急着装数据库,把 2.3 里那串补丁按顺序打完再往下走。这里的顺序不是形式主义:KB2919442 是服务堆栈更新,KB2919355 依赖它才能装上,后面五个 KB 又依赖 KB2919355。跳过第一个直接装第二个,会得到「此更新不适用于你的计算机」,然后你以为补丁已经装过了,实际上一个都没进去。
# 装完补丁后核对,看已安装更新里有没有对应的 KB Get-HotFix | Where-Object { $_.HotFixID -match 'KB2919442|KB2919355|KB2932046|KB2959977|KB2937592|KB2938439|KB2934018' } | Select-Object HotFixID, InstalledOn | Sort-Object InstalledOn # 确认 .NET Framework 版本不低于 4.7.2,SMC 安装程序会做这项检查 Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' | Select-Object Version, ReleaseGet-HotFix读的是 Win32_QuickFixEngineering,对于 .msu 形式的更新一般能列出来,个别补丁因为安装方式不同可能不显示,这时候以安装时的返回码为准。第二条命令里的Release值可以用来判断具体小版本,但在实际部署里我更习惯直接看安装程序有没有报缺 .NET 的错——报了就补装,比查注册表直观。
3.4 装完必做的四项系统配置
系统装完、补丁打全,接下来是四项固定动作,做完再装数据库。
第一项是改计算机名。名字要求纯英文、不含下划线和特殊字符,长度控制在 15 个字符以内,并且绝对不能和当前登录的用户名相同。这一条是硬要求,SMC 安装到 9% 时有一类报错就是提示计算机名和当前登录用户名一致,处理办法只有改名重启,前面装的全白等。
# 计算机名改成现场规划的名字,例如 SMC-NODE01 Rename-Computer -NewName 'SMC-NODE01' -Force -Restart第二项是配 IP 和远程访问。单机部署给固定 IP,别用 DHCP,数据库连接串和 SMC 的服务注册都依赖这个地址稳定。远程桌面按需开启。
第三项是关闭防火墙。指导里在 SQL Server 安装的规则检查环节特别提到,如果「Windows 防火墙」状态是警告,说明防火墙没关,需要关掉后点「重新运行」直到状态变成「已通过」。既然这一步迟早要做,不如在系统配置阶段就关掉。
# 内网单机部署环境,三个配置文件一起关;上线后按现场安全要求再逐条放行端口 Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False Get-NetFirewallProfile | Select-Object Name, Enabled第四项是把系统盘之外的可用空间挂成数据盘,专门放数据库的数据文件和备份。数据库文件默认路径在 C 盘,后面一旦库长大,C 盘吃紧会连带系统更新失败,这个坑我踩过一次,之后再没让数据库文件落在系统盘。
4. 装数据库:SQL Server Express 的实例、账户与升级路径
4.1 规则检查卡在防火墙警告
SQL Server 安装程序启动后的第一道关卡是规则检查,界面上会列一长串检查项。绝大多数项都是绿色通过,唯独「Windows 防火墙」这一项可能显示警告。这不是让你点下一步凑合过去,而是提示你去把防火墙关掉,然后点「重新运行」重新检查,直到这一项显示已通过。
这里有个操作顺序上的细节:先关防火墙,再点重新运行。如果先点重新运行、再去关防火墙,界面状态不会自己刷新,你会以为没生效,实际上已经生效了,白折腾一圈。规则检查全绿之后再往下走,否则装了半截再回来改,实例可能处于半配置状态,清理起来比重装还麻烦。
4.2 实例配置与服务账户:默认实例最省事
安装类型选「全新安装」,接受许可条款,一路到特性选择保持默认即可。到了实例配置这一步,选默认实例,实例名保持 MSSQLSERVER 不要改。SMC 的安装程序默认按默认实例去探测数据库,命名实例需要额外指定实例名和端口,多一层配置就多一处出错的地方。
服务配置保持默认账户即可,不需要改成域账户。单机部署里 SQL Server 数据库引擎服务和 SQL Server Browser 服务都设成自动启动,后者虽然不是必须,但装了管理工具做本地连接时有用。排序规则这一项要留意,保持和操作系统语言一致的中文排序规则,中途改成 Latin 排序,后面 SMC 建库脚本执行时会文字乱码。
4.3 数据库引擎配置:混合模式与 sa 密码策略
数据库引擎配置是整个数据库安装里唯一需要动脑的一步。身份验证模式选「混合模式」,同时设置 sa 账户密码。指导里给的做法是设成厂商惯例的初始口令,我一般也照这个来,但会加一条自己的习惯:装完立刻改掉,并把新口令记到现场的密码台账里。
-- 装完之后确认身份验证模式和版本是否对得上 SELECT SERVERPROPERTY('ProductVersion') AS product_version, SERVERPROPERTY('Edition') AS edition, SERVERPROPERTY('IsIntegratedSecurityOnly') AS windows_auth_only, -- 0 表示混合模式 SERVERPROPERTY('Collation') AS collation; -- sa 默认是禁用的,确认状态并启用 ALTER LOGIN sa ENABLE; ALTER LOGIN sa WITH PASSWORD = 'Init#Passw0rd'; -- 示例口令,装完按现场规范改第一条查询里IsIntegratedSecurityOnly返回 0 才代表混合模式生效,返回 1 说明安装时选成了仅 Windows 身份验证,这种情况不用重装,改一下实例属性再重启服务就行。Collation看到中文排序规则就说明语言版本没选错。第二条的ALTER LOGIN在默认配置下 sa 是禁用状态,很多现场「数据库连不上、提示登录失败」最后查出来就是 sa 没启用,或者启用后没重启服务。
密码策略要提一句:过于简单的口令会被 SQL Server 的密码策略拒绝,报错信息是「密码不满足运行此 SQL Server 的计算机上的密码策略要求」。这种报错不是安装坏了,换个复杂度够的口令就行。
4.4 管理工具与 .NET 3.5 依赖
数据库实例装完,管理工具单独装。管理工具安装包和数据库安装包是同一个下载入口里的不同文件,别把两者搞混。以管理员身份运行安装程序,选择「New SQL Server stand-alone installation」,安装类型按默认走,接受许可条款,特性选择这一步按默认勾选。
真正容易卡住的是特性检查环节。管理工具依赖 .NET Framework 3.5,而 Windows Server 2012 R2 之后的系统默认不启用这个功能,检查会报 0x800F0906 一类的错误代码。解决办法不是去网上找离线包,而是挂载操作系统安装镜像,用镜像里的 sxs 目录做源。
# D: 是挂载后的系统安装镜像盘符,sources\sxs 是 .NET 3.5 的功能源 Install-WindowsFeature Net-Framework-Core -Source 'D:\sources\sxs' # 装完复核功能状态 Get-WindowsFeature Net-Framework-Core | Select-Object Name, InstallState-Source参数指向的是安装镜像里的功能文件目录,不是整个镜像根目录,写成D:\会报「源文件找不到」。这一步做完再回到安装程序点检查,通过之后继续装完。装完管理工具连一次本地实例,能展开数据库节点、能执行查询,说明工具和实例之间是通的,再进 SMC 安装。
4.5 从 2008 Express SP2 就地升级到 2014 Express SP2
存量现场常见的情况是机器上已经跑着 SQL Server 2008 Express SP2,要升到 2014 Express SP2。这类升级我建议用就地升级而不是卸载重装,因为 SMC 的配置库就在里面,重装等于把数据搬一遍,风险更大。
升级前先停 SMC 相关服务,做一次完整备份并校验。
-- 备份按实际库名替换,WITH CHECKSUM 让备份过程校验页完整性 BACKUP DATABASE [SMCConfig] TO DISK = 'D:\bak\SMCConfig_before_upgrade.bak' WITH INIT, CHECKSUM, STATS = 10; -- 升级前记下版本和兼容级别,升级后对比 SELECT @@VERSION AS version; SELECT name, compatibility_level FROM sys.databases;备份完成之后运行 2014 Express SP2 安装包,选「升级」而不是「全新安装」,实例名选已有的那个。升级过程会自动保留登录名、作业和数据库,sa 口令沿用原来的。装完再执行一次上面的版本查询,@@VERSION里出现 2014 和 SP2 字样就说明升级到位。紧接着把每个库的兼容级别调到 120,否则新实例还是按老兼容级别跑,新的查询优化器用不上。升级完成后启动 SMC 服务,登录管理台确认数据库状态正常,这一步在最后一章还会再验一次。
5. 常见问题排查:装到 9% 报错之后我依次看什么
指导的故障章节列了十八条,实际现场高频撞上的就那么几条。这一节按「现象 → 原因 → 解决」把最容易翻车的五个记录下来,遇到报错可以先在这里对一遍。
5.1 装到 9% 报「计算机名和当前登录用户名一致」
现象:SMC 安装进度到 9% 左右中断,提示计算机名和当前登录用户名一致,安装回滚。
原因:安装程序会把主机名和当前会话的用户名做比对,两者相同会触发这条校验,避免后续服务账户解析出现歧义。默认装系统时主机名往往是随机串,但如果有人在装完后手动把主机名改成了 Administrator 或者当前登录名,就会撞上。
解决:改计算机名,重启,重新跑安装程序。名字取纯英文,例如 SMC-NODE01,不要带下划线和点号。
Rename-Computer -NewName 'SMC-NODE01' -Force -Restart5.2 装到 9% 报「无法在当前操作系统应用系统加固」
现象:同样是 9% 附近中断,报错里带「系统加固」字样。
原因:SMC 安装过程中会按预设基线对操作系统做安全加固,加固脚本是按受支持的操作系统版本和补丁级别写的。系统版本不对、补丁没打全、或者用了非标准镜像的精简版,加固脚本识别不到预期的注册表和组件,就报这个错。
解决:核对操作系统是不是标准版且带 GUI,把 2.3 里的补丁链按顺序全部装完再重试。用精简版镜像的,换回标准镜像重装系统,这条没有捷径。
5.3 Install VC2017 x86 depend files 失败
现象:安装过程中弹出 VC2017 x86 依赖安装失败的提示。
原因:机器上已经装了更高版本的 VC 运行库,或者上一次安装失败留下了残留,导致 x86 版安装包认为冲突;也有情况是系统缺少对应的更新。
解决:在程序和功能里找 Microsoft Visual C++ 2017 Redistributable (x86),先卸载再重装;没有的话直接装官方 x86 版运行库,装完重启再跑 SMC 安装程序。注意只装 x64 版是无效的,SMC 的 32 位组件需要 x86 运行库。
5.4 BCP 不是默认路径导致安装失败
现象:安装或建库阶段报错,提示 bcp 工具不在预期位置。
原因:bcp 是 SQL Server 自带的批量导入工具,安装程序会按默认安装路径去调用它。如果之前装过别的 SQL Server 版本、手工改过安装目录,或者 PATH 环境变量里指向了另一个版本的 bcp,就会找不到。
# 查当前 PATH 里能解析到哪个 bcp Get-Command bcp -All | Select-Object Source # 查环境变量里和 SQL 相关的路径 $env:Path -split ';' | Where-Object { $_ -match 'SQL|100|120|130' }解决:确认 bcp.exe 在默认实例的 Binn 目录下,把该目录补进系统 PATH,并且保证 PATH 里没有其它版本 SQL Server 的 Binn 目录排在前面。改完 PATH 要新开一个命令行窗口才生效,这点很容易漏。
5.5 数据库连接超时与登录超时
现象:SMC 安装或升级到连接数据库这一步,长时间无响应后报连接超时、登录超时。
原因:三类居多。一是 SQL Server 的 TCP/IP 协议没启用,只开了共享内存,本地某些组件连不上;二是 1433 端口被防火墙拦了;三是 sa 没启用或者口令不对,表现为登录超时而不是明确的密码错误。
# 确认 1433 在监听、SQL 相关服务都起来了 Get-Service MSSQLSERVER,SQLBrowser -ErrorAction SilentlyContinue | Select-Object Name,Status Get-NetTCPConnection -LocalPort 1433 -State Listen | Select-Object LocalAddress,LocalPort解决:启用 TCP/IP 协议后重启数据库服务,确认端口监听;防火墙按 3.4 的方式关掉或放行 1433;sa 用 4.3 的语句启用并设口令。三步做完再跑安装程序,别在半通不通的状态下反复重试,容易把实例状态搞乱。
6. 验证跑通:从服务状态到一次真实的会议调度回归
装完不等于跑通。我的习惯是固定走三步验证,任何一步不过都不算交付。
第一步验服务与端口。数据库引擎服务、SQL Browser 服务必须是运行状态,1433 端口必须处于监听。这一步用两条命令就能确认,比翻事件查看器快得多。
Get-Service MSSQLSERVER,SQLBrowser | Select-Object Name,Status,StartType Get-NetTCPConnection -LocalPort 1433 -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess第二步验数据库本身。用 sqlcmd 走一次真实的 sa 登录,不带 Windows 身份验证,这样验的才是 SMC 将来用的那条链路。
# -S 用 127.0.0.1 而不是 localhost,避免解析到 IPv6 回环 sqlcmd -S 127.0.0.1,1433 -U sa -P "Init#Passw0rd" -Q "SELECT @@VERSION;" -l 10-l 10是登录超时秒数,设短一点,连不上就立刻报错,不会干等。返回结果里能看到版本号和 SP2,说明实例、协议、账户三样都对。
| 验证项 | 检查方式 | 期望结果 |
|---|---|---|
| 数据库服务 | Get-Service MSSQLSERVER | Running / Automatic |
| 端口监听 | Get-NetTCPConnection -LocalPort 1433 | 127.0.0.1 或 0.0.0.0 处于 Listen |
| 混合模式 | SERVERPROPERTY('IsIntegratedSecurityOnly') | 返回 0 |
| 排序规则 | SERVERPROPERTY('Collation') | 中文排序规则,与系统语言一致 |
| 依赖版本 | Get-HotFix、.NET Release 值 | 补丁齐全,.NET 不低于 4.7.2 |
| SMC 状态 | 管理台看数据库状态、文件状态 | 两者都正常且一致 |
| 业务回归 | 建测试会场、预约一场会议 | 会议能正常建立并产生记录 |
第三步验 SMC 自身。登录管理台,先看数据库状态和文件状态这两项,重点不是各自正常,而是两者一致——指导里专门有一条故障是「SMC 数据库状态和文件状态不一致」,出现这种情况通常是升级过程中数据库已经切换、配置文件还指向旧实例,得回去核对连接配置。状态一致之后做一次真实的会议调度:建一个测试会场,预约一场半小时的会议,看会议能不能正常建立、记录能不能写进库。这一步比任何日志都直观。
升级场景还要多验一项:升级前后的库版本和兼容级别对比。
SELECT @@VERSION AS version; SELECT name, compatibility_level FROM sys.databases WHERE database_id > 4; -- 兼容级别应为 120(SQL Server 2014)兼容级别如果还停在 100,说明升级只换了实例没换级别,用ALTER DATABASE ... SET COMPATIBILITY_LEVEL = 120逐个调过来,调完重启 SMC 服务再跑一次会议调度。
从那以后我每次装完这套环境,不管现场催得多紧,都强制走一遍端口监听、sqlcmd 登录、状态一致性这三步,宁可多花十分钟,也不想在交付当天晚上接到「会议建不起来」的电话。希望帮到你。
本文还有配套的精品资源,点击获取