十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

TIA Portal卸载后SQL Server残留实例的彻底清理方法

TIA Portal卸载后SQL Server残留实例的彻底清理方法 实际干活的人都知道TIA Portal这套东西向来是装起来费劲卸起来更费劲。前阵子我把博途TIA Portal V17从开发机上卸掉准备重装控制面板里明明已经看不到西门子的主程序了结果重装向导跑到一半直接报错——命名实例WINCC已存在。查了一圈才发现罪魁祸首就是WinCC装进来的那个SQL Server实例卸载TIA Portal时它根本不会跟着走服务还在、注册表还在、数据文件还在就这么阴魂不散地挂着。这篇我就把彻底清除这类残留SQL Server实例的完整思路和操作步骤整理出来帮被同样问题卡住的朋友少走弯路。整个过程不需要什么高深技巧但顺序和细节很关键照着做基本能弄干净。1. 先搞清楚TIA Portal卸载后为什么总会残留SQL Server实例1.1 残留的根源WinCC与SQL Server的绑定关系要彻底清理得先弄明白这堆东西是怎么缠在一起的。TIA Portal里的WinCC不管是WinCC Runtime Advanced还是WinCC Professional需要把变量记录、报警记录、用户归档这些数据存到数据库里。西门子选的默认存储引擎就是Microsoft SQL Server在安装TIA Portal的WinCC组件时安装程序会在后台静默装一个SQL Server实例并且给实例起名叫WINCC。问题就出在这个静默安装上。普通用户安装SQL Server时微软官方会提供管理工具SQL Server Management Studio和卸载入口但TIA Portal装数据库的流程是脚本化的它对SQL Server做的是一套定制化部署不会把常规的SQL Server卸载入口完整暴露给你。等你哪天卸载TIA Portal时卸载程序只会移除它自己安装的应用组件STEP 7、WinCC、Startdrive这些但当初装进去的SQL Server实例在微软的组件登记体系里被识别为独立的Microsoft SQL Server产品。微软卸载SQL Server的逻辑又特别保守它默认用户可能还有其他业务数据库挂在同一个数据库引擎上所以在卸载时往往只删应用层的东西不会主动去动实例和数据文件。这就是最典型的状态TIA Portal主体已经卸掉了但SQL Server服务MSSQL$WINCC还在运行数据目录还占着好几个G的硬盘空间注册表里一长串的实例键值都还活着。顺带一提不同版本的TIA Portal带的SQL Server实例版本还不一样V14以前的可能是SQL Server 2012/2014V16/V17这一代通常是SQL Server 2016/2017/2019V18那代基本就是SQL Server 2019打底。不管哪个版本实例名绝大多数都是WINCC服务名是MSSQL$WINCC这个规律在后面的清理过程中很重要。1.2 残留物到底留在哪里清理之前心里得有张残留物分布图。根据我几次处理的经验TIA Portal卸载后残留的SQL Server相关内容主要分布在四个层面服务层面是最容易看到的。打开服务管理器services.msc通常能看到MSSQL$WINCC、SQLAgent$WINCC有的机器上还会带着SQL Server Reporting Services的实例服务ReportServer$WINCC。只要这些服务处于启动或自动启动状态系统资源就一直被占着而且如果你重装TIA Portal装到一半检测到同名服务存在会直接失败。注册表层是最烦人的。HKLM\SOFTWARE\Microsoft\Microsoft SQL Server下面会有实例目录比如MSSQL15.WINCC对应SQL Server 2019、MSSQL14.WINCC对应SQL Server 2017还有Instance Names\SQL这个键值下面挂着WINCC的注册项。另外HKLM\SYSTEM\CurrentControlSet\Services\下面还有独立的服务注册键。文件系统层也跑不掉。C:\Program Files\Microsoft SQL Server\下面会有对应的实例目录比如MSSQL15.WINCC里面是数据库引擎程序、系统数据库文件master、msdb、model和用户数据库文件WinCC归档库一般在DATA目录下。另外C:\Program Files (x86)\Microsoft SQL Server\下可能也有零散的客户端组件。Windows安装登记层面还有一堆MSI卸载注册项在程序和功能里往往能看到Microsoft SQL Server 2019 (64-bit)之类的条目卸载SQL Server实例时得从这些入口走。我用一个表格把这四层东西的典型位置和危害理清楚方便对照排查残留层面典型位置对系统的影响Windows服务MSSQL$WINCC、SQLAgent$WINCC开机自启占用资源、端口占用注册表HKLM\SOFTWARE\Microsoft\Microsoft SQL Server、CurrentControlSet\Services\MSSQL$WINCC重装检测到实例存在而中断文件系统C:\Program Files\Microsoft SQL Server\MSSQLxx.WINCC多个G的磁盘占用、数据残留安装登记程序和功能里的SQL Server相关条目影响后续MSI安装、Windows Installer缓存2. 动手之前先备份、再诊断别一上来就删2.1 备份工程文件与授权信息很多人清理残留时容易上头端起注册表编辑器就开干。我的建议是动手之前先花十分钟做两件事备份和诊断。别嫌啰嗦我在一台没备份的机器上吃过亏——把SQL Server实例删完之后才发现那里面还挂着WinCC的历史归档数据虽然对大部分人来说这些归档没太大价值但万一有需要追溯的数据就晚了。备份的重点有这几个第一是TIA Portal项目文件如果你在卸载前没有把项目归档导出先别急着清数据库先把项目目录整个拷一份出来。第二是WinCC的归档数据库如果SQL Server实例里还有你需要的工程历史数据可以先通过SQL Server Management Studio把数据库分离或者做一个完整备份这里注意如果TIA Portal已经卸了你大概率没有SSMS那可以先把数据目录完整拷贝一份。第三是授权相关的东西这个不细说但建议把C盘里西门子相关目录下看起来像授权文件的文件夹改名保留别误删。备份注册表也很重要清理注册表之前强烈建议先导出一次reg export HKLM\SOFTWARE\Microsoft\Microsoft SQL Server D:\backup\sql_reg_backup.reg /y reg export HKLM\SOFTWARE\Microsoft\Microsoft SQL Server Tools D:\backup\sql_tools_reg_backup.reg /y这样万一删过头了还能原样恢复。我一般还会顺带导出一份HKLM\SYSTEM\CurrentControlSet\Services下面所有MSSQL开头的注册表防止误伤。2.2 用SQL Server配置管理器确认实例与服务备份做完了接着做诊断。最直观的判断方式就是看服务和端口。先打开服务管理器把所有MSSQL开头的服务列出来确认实例名。正常来说你会看到MSSQL$WINCC然后看看它们的状态是正在运行还是已停止。如果是已停止清理起来更安全如果是正在运行建议你先手动停掉卸载过程中可以减少文件占用导致的失败。这里有个细节有的机器上装了不止一个SQL Server实例。比如你之前做其他开发时自己装过一个SQLEXPRESS实例现在又因为TIA Portal多了一个WINCC实例。清理时千万要分清只删WINCC相关的不要碰其他实例。判断方法是看服务名和注册表里Instance Names\SQL下面列出的实例名WINCC对应的是该清理的SQLEXPRESS或MSSQLSERVER如果还在用就留着。另外可以用命令行快速确认实例状态sc query MSSQL$WINCC返回结果里SERVICE_NAME是MSSQL$WINCCSTATE如果是STOPPED就说明服务已停止。同时用netstat确认端口占用情况netstat -ano | findstr 1433如果看到1433端口有监听再看一下对应进程是不是sqlservr.exe。需要说明的是命名实例默认不固定用1433端口而是通过SQL Server Browser动态分配端口所以即使1433没被占不代表SQL Server没运行。最靠谱的方式还是看服务状态。2.3 规划清理顺序和工具清单诊断完了心里就有数了。清理顺序上我的建议是先卸载应用层面再停服务再走SQL Server官方卸载流程最后手工清注册表和文件。这个顺序不能乱因为如果你一上来就手工删服务注册表Windows Installer的卸载程序会因为找不到对应服务而导致卸载流程报错反而会搞出一堆残留的MSI安装包状态后面重装更麻烦。工具清单很简单控制面板的程序和功能、SQL Server安装介质下载对应版本的SQL Server安装包或者直接使用TIA Portal安装包里自带的SQL Server安装文件、注册表编辑器、服务管理器、一个管理员权限的命令行窗口。建议提前准备好SQL Server安装介质因为程序和功能里的卸载入口本质上也是调用安装介质的setup.exe来执行的如果你机器上已经找不到安装文件微软的卸载入口可能会报无法找到安装文件。这时候最稳妥的做法是到微软官方下载同版本的SQL Server 2019或对应版本的安装镜像解压后用setup.exe走卸载流程。3. 实战清理全流程一条一条拆干净3.1 通过控制面板正规卸载西门子与SQL Server组件第一步先在程序和功能里把TIA Portal卸载后剩下的西门子相关条目清一遍。打开控制面板查看方式改成小图标进程序和功能按安装日期排序找所有名称里带Siemens、TIA Portal、STEP 7、WinCC、Startdrive的条目一个个卸载。这个阶段要注意卸载顺序一般是从应用到运行库比如先卸TIA Portal V17如果它还没卸干净再卸STEP 7、WinCC最后卸那些Siemens Runtime、Automation License Manager之类的公共组件。每卸完一个如果系统提示重启建议先重启再继续别嫌麻烦Windows Installer在重启之前对文件占用检查特别死板强行继续容易出现另一个安装正在进行的互卡现象。西门子的应用卸载完后回到程序和功能现在你应该还能看到类似Microsoft SQL Server 2019 (64-bit)、Microsoft SQL Server 2019 Setup (English)这样的条目。这些就是残留的SQL Server相关安装项。现在你可以在程序和功能里选中SQL Server条目点卸载它会跳出SQL Server安装中心的界面选择删除功能。这里要注意SQL Server的卸载是实例级别的。在弹出的窗口中你会看到本机安装的所有SQL Server实例勾选WINCC这个实例然后在功能选择里保留默认通常会把Database Engine Services和Shared Features都选上点击下一步它会列出要删除的功能和数据清单确认无误后执行删除。卸载过程可能需要十几分钟期间sqlservr.exe进程会停止Windows服务被移除注册层面的实例主键也会被删掉。3.2 使用SQL Server安装中心卸载实例的详细操作如果你在程序和功能里找不到SQL Server条目或者点击卸载报错那就需要手动从SQL Server安装介质走一遍卸载。以SQL Server 2019为例把安装镜像解压到一个没有中文和空格的路径目录比如D:\sql2019\然后以管理员身份打开命令行窗口进入这个目录。最直观的方式还是直接双击镜像根目录里的setup.exe等待SQL Server安装中心出现然后选择删除按向导选定WINCC实例执行卸载。如果你希望用命令行做自动化卸载也可以这么写D:\sql2019\setup.exe /ACTIONUninstall /FEATURESSQLENGINE,SSMS /INSTANCENAMEWINCC /Q需要注意这里的FEATURES参数别乱填如果不清楚装了哪些功能最稳妥的方式是不要带FEATURES参数直接运行setup.exe进入图形界面选。所有卸载完成后它会提示你重新启动计算机这一步一定要重启。重启之后再回程序和功能查看正常情况下SQL Server主条目应该已经不在了但可能还剩下一些Microsoft SQL Server 2019 Reporting Services、Microsoft SQL Server Management Studio之类的子条目。这些如果确认是TIA Portal装进来的同样选中卸载。要注意的是如果你自己另外装过SSMS或报表服务别误删自己有用的工具要根据Install Date和条目名称判断。3.3 手工清理注册表与服务残留正规卸载流程走完之后真正的硬仗才开始——手工清残留。这一步需要管理员权限而且操作之前务必确认你已经导出了注册表备份。先处理服务层面。打开管理员命令行逐个查询并删除WINCC相关的服务sc delete MSSQL$WINCC sc delete SQLAgent$WINCC sc delete ReportServer$WINCC如果提示服务已被标记为删除说明服务在卸载时已经注销了只是还没完全消失重启一次就没了。如果提示指定的服务已标记为删除或者服务不存在都是正常现象说明这一步本来就不需要太担心。接着清理注册表。打开注册表编辑器重点检查这几个位置HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL下面如果还有WINCC名称选中对应值右键删除。这个键是最关键的——SQL Server的实例发现机制靠它如果它还在重装TIA Portal时照样会认为WINCC实例存在。HKLM\SOFTWARE\Microsoft\Microsoft SQL Server下面如果有MSSQL数字后缀加上.WINCC的目录比如MSSQL16.WINCC对应SQL Server 2022MSSQL15.WINCC对应2019整个删除。HKLM\SYSTEM\CurrentControlSet\Services下面如果有MSSQL$WINCC这个键卸载完一般已经删了如果还在就删除。HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下面残留的SQL Server卸载注册项也可以根据DisplayName判断后删除。清理注册表时我用得最多的命令是reg delete HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL /v WINCC /f不过你最好先在注册表编辑器里人工浏览一遍看还有没有其他WinCC相关键再去用命令行快速删除效率和安全兼顾。3.4 清理文件系统与临时目录注册表弄完接着是文件系统。打开资源管理器定位到C:\Program Files\Microsoft SQL Server\里面应该能看到类似MSSQL15.WINCC的目录整个删掉。如果你装了相同版本的SQL Server其他实例目录会以不同后缀命名比如MSSQL15.SQLEXPRESS这种属于其他实例别碰。再看C:\Program Files (x86)\Microsoft SQL Server\这个目录下如果有残留的客户端组件数据一般会有170、150之类的数字目录如果在卸载过程中没有被清理干净也可以手动删除。但保守起见如果拿不准就别硬删毕竟这里可能混着其他微软SQL Server连接组件。我个人习惯是只删明确带WINCC字样的目录和文件。还有几个常见残留位置Windows安装目录下的Temp文件夹C:\Windows\TempTIA Portal和SQL Server安装时都会往这里丢临时文件安装失败或卸载中断后经常有一大堆。清理时打开这个目录删除里边所有sql开头的文件夹和文件比如sql_***_full之类的临时解压目录。另外还有C:\Windows\Installer目录这个是Windows Installer缓存里面有一些MSI和MSP补丁文件我不建议手动去翻它删错了会影响系统里其他软件的正常卸载。最后检查一下用户目录下的临时文件夹C:\Users\你的用户名\AppData\Local\Temp把与SQL Server、TIA Portal相关的内容清理掉。3.5 验证清理结果与重启确认所有清理动作做完之后不要急着装TIA Portal先花五分钟验证一下。打开服务管理器搜索MSSQL确认已经找不到任何WINCC相关的服务。打开注册表编辑器确认Instance Names\SQL下面已经没有WINCC名称。打开文件资源管理器确认Program Files下的SQL Server实例目录已经不存在。然后重启电脑。重启是为了让Windows服务控制管理器彻底刷新服务注册表同时释放所有被加载的DLL和文件句柄。重启后再开服务管理器确认一遍。验证还有一个很实用的手段用PowerShell快速检查Get-Service -Name *WINCC* Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL两条命令如果都没有输出WINCC相关的东西说明基本干净了。这时候再重新安装TIA Portal就不会撞上那个实例已存在的报错了。4. 清理后重装的三个高频问题与对策4.1 端口1433被占用导致安装失败清理完残留实例后重装TIA Portal最常见的拦路虎就是端口占用。虽然命名实例一般用动态端口但SQL Server的默认实例或某些配置会把端口固定在1433。如果之前那次卸载没有把服务停干净或者系统里还有其他程序占用了1433端口重装向导在配置WinCC数据库连接时会卡住。遇到这种情况先用netstat确认谁占着端口netstat -ano | findstr 1433看到PID之后再用任务管理器或命令行查看对应的进程tasklist | findstr PID号如果占用者还是sqlservr.exe说明旧的SQL Server没清干净回到上一节的注册表和系统服务清理流程再走一遍。如果占用的是其他非SQL Server进程而且你确实需要这个端口可以考虑卸载完TIA Portal以后在SQL Server配置管理器里把WINCC实例的TCP/IP端口改到其他空闲端口。不过这是重装之后的事对重装本身帮助不大。更简单的做法是重装前先确保没有任何sqlservr.exe进程在跑把1433这个坑空出来。4.2 提示已有SQL Server实例存在无法继续重装TIA Portal时如果提示指定的实例名称WINCC已存在按我前面的步骤清理完基本不会再遇到。但如果你清理环境已经按照顺序做完了依旧出现这个提示可以重点检查两个地方。一是注册表HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL看有没有其他残留值有时你明明删过但某些软件又把它建回来了这种情况就再删一次然后重启。二是HKLM\SOFTWARE\Siemens或者HKLM\SOFTWARE\WOW6432Node\Siemens下面的TIA Portal配置键。TIA Portal在安装时会把WinCC数据库实例的初始化信息写到西门子自己的注册表分区里如果这里残留了指向WINCC实例的配置安装向导会认为数据库已经存在。你可以浏览HKLM\SOFTWARE\Siemens\S7Web或类似路径找到包含WINCC字样的注册项确认后删除。这个位置不作为第一排查点但如果常规清理无效值得看一眼。4.3 重装TIA Portal时报错数据库服务无法启动还有一种比较隐蔽的情况清得很干净重装也走了大半程但最后一步起数据库服务时失败了报错信息类似SQL Server服务无法启动或错误码1053。这种现象常见于系统账户权限不对劲的机器SQL Server服务账户在注册表清理过程中丢失了登录权限或者安装目录的安全权限出了偏差。这时候最直接的解决方式是打开本地安全策略或者服务管理器给SQL Server服务指定一个拥有管理员权限的账户常见做法是使用NT AUTHORITY\NETWORK SERVICE或者本地SYSTEM账户。在服务属性里的登录选项卡把服务账户改成LocalSystem然后启动服务。确认服务能起来之后TIA Portal后续的配置项通常就能正常完成了。如果还是起不来八成是本次安装的SQL Server实例目录权限不对手动赋予NETWORK SERVICE对数据目录的完全控制权限即可。5. 常见问题速查与个人心得5.1 常见问题速查表这节我把实际操作中最常遇到的情况整理成一个速查表方便你清理到一半卡壳时快速定位问题现象可能原因处理办法控制面板里找不到SQL Server卸载入口TIA Portal静默安装未注册标准卸载项使用SQL Server官方安装介质setup.exe走删除功能卸载SQL Server时提示找不到安装文件MSI缓存被清理过手动解压同版本SQL Server镜像后再执行卸载服务列表里MSSQL$WINCC删不掉服务正在运行或处于关闭中残留先net stop停服务再sc delete删除注册表删除报错拒绝访问权限不足或键值被进程占用以管理员身份运行regedit必要时提权检查是否被杀软拦截数据文件目录删不掉有sqlservr.exe进程锁定文件结束进程后删除或重启后删除重装TIA Portal报实例已存在Instance Names\SQL下仍有WINCC记录清理注册表对应键值并重启重装后SQL Server服务起不来服务账户权限异常修改服务登录账户为LocalSystem并重启服务5.2 我的几点实操心得最后分享一些个人心得。第一TIA Portal这种工业软件卸载永远比安装更考验耐心。我遇到过很多朋友图省事卸载TIA Portal时直接用第三方卸载工具强力删除结果Windows Installer的数据库被搞乱SQL Server实例没了卸载入口后面重装TIA Portal反复失败。这类工业软件还真不适合用那种强力卸载工具规规矩矩从控制面板和官方安装向导走反而最省事。第二清理SQL Server实例时最核心的其实是那个Instance Names\SQL注册表键。很多时候服务删了、文件删了就是这里还有一个名字新版TIA Portal安装向导就会认为机器上已经有WINCC实例直接拒绝继续。所以不管前面步骤做到哪一步最后一定要记得检查这个键值。第三动手前做好备份尤其是注册表备份。清理残留实例这个操作虽然不复杂但牵扯到注册表和服务失误空间还是有的。备份注册表只要一条命令恢复时却能救命。第四如果你经常需要在一台机器上反复装卸不同版本的TIA Portal比如同时搞V16和V18的项目建议每次卸载之后都用我上面的方法彻底清一遍特别是确认SQL Server实例被删干净之后再装下个版本。不然两个版本的WinCC数据库实例撞在一起那个酸爽试过的人都知道。按这套流程走下来一台被TIA Portal残留SQL Server实例折腾过的电脑基本能恢复干净重装时也不再会被各种实例已存在的报错卡住。整个过程不复杂核心就是别急、别乱删、按顺序来先正规卸载再手工清残留最后验证重启三步走完就踏实了。
返回列表