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

资讯详情

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

NI软件卸载与残留清理完整指南:从依赖原理到官方工具实战

NI软件卸载与残留清理完整指南:从依赖原理到官方工具实战 做自动化测试和测控系统的人基本都躲不开National Instruments的软件。LabVIEW、TestStand、NI-VISA、NI-DAQmx这一整套东西装的时候还算顺畅但到了卸载环节各种诡异问题就全冒出来了。驱动版本不对要换软件升级前要清旧版甚至只是想让另一块采集卡正常工作都可能在卸载这一步卡住。我自己在设备调试现场遇到过不止一次控制面板里把LabVIEW卸得干干净净一装新版驱动就提示“版本冲突”最后只能翻注册表手动清理折腾一个下午。后来把NI软件家族的结构和官方卸载工具的用法摸透了才终于总结出一套从准备、卸载到清理残局的完整流程这篇就好好聊一聊。无论你是还在用LabVIEW做开发的工程师还是负责多台上位机软件维护的运维人员这篇内容都能帮你少走很多弯路。我会先把NI软件“为什么难卸载”的根本原因讲清楚再带你把三种常规卸载方式、官方清理工具的使用边界、以及卸载失败时的排查思路全部过一遍。1. 先搞明白NI软件为什么这么难卸干净1.1 NI产品不是一个软件而是一张依赖网很多人听到“NI软件”脑子里只有一个LabVIEW但真实情况远没这么简单。NI的产品线覆盖了上位机开发环境、测试管理、实时系统、硬件驱动和公共运行时常见的就有下面这一大批组件类型典型软件主要作用开发环境LabVIEW、LabWindows/CVI、Measurement Studio编写测试和控制程序测试管理TestStand、VeriStand、DIAdem搭建自动化测试序列、数据管理硬件驱动NI-DAQmx、NI-VISA、NI-488.2驱动采集卡、仪器总线、GPIB设备仪器驱动NI-SCOPE、NI-FGEN、NI-RFSA、NI-DMM驱动示波器、信号源、射频设备公共运行时NI Common Runtime、NI License Manager多软件共享的基础运行支撑问题的关键在于LabVIEW运行时、硬件驱动和公共组件之间存在非常复杂的引用关系。比如NI-DAQmx在安装时会调用LabVIEW Runtime的某些DLL而NI-VISA又可能被TestStand依赖。普通的“添加/删除程序”根本不会分辨这些依赖关系它只会傻傻地删除自己负责的部分导致其他软件引用的共享文件被删掉或者反过来——因为检测到仍有软件引用就不删除留下大量垃圾。1.2 残留的三个重灾区共享组件、许可证、注册表根据我的实际清理经验NI软件卸载后残留最严重的地方就是这三个第一是共享公共组件。NI Common Runtime、NI License Manager、NI Error Reporting这类东西安装时会在Program Files\National Instruments下写入大量公共文件。当你卸载某个上层软件时卸载器会检查公共组件是否还被其他软件引用。这个检查逻辑经常出bug导致该删的没删不该删的却删了。第二是许可证文件。NI的软件很多需要激活激活信息会写入许可证管理器。传统卸载流程经常会保留许可证文件表面看是贴心帮你保留授权实际上在换版本或换硬件时这些残留的授权记录会和新版本的授权检测机制冲突导致新装好的软件反而提示“许可证无效”。第三是注册表。NI软件在注册表里写下的键值多到吓人设备枚举键、服务项、驱动过滤项、COM组件注册信息全都有。手动卸载基本清不干净而这些残留注册表项正是新版本安装时报“安装程序检测到已安装版本”的元凶。1.3 残留会带来什么实际后果卸不干净不是小事它会直接造成几个非常典型的故障场景新驱动装上后设备管理器里硬件仍显示旧版本或者干脆变成“未知设备”。新版LabVIEW启动时加载了旧版本的DLL直接崩溃或报错“LabVIEW VI memory corruption”。安装新驱动到一半提示“需要更高版本NI-VISA”但旧版却卸不掉。许可证冲突明明花钱买了正版授权软件却要求重新激活。这些情况在现场最耽误时间因为光看错误提示根本定位不到根因。所以正确的思路是在动手卸载之前就把卸载当作一个“项目”来管理而不是双击几下就完事。2. 动手卸载前先把这三件事做完2.1 备份许可证、配置和项目依赖信息很多人一上来就点卸载卸完才发现LabVIEW授权没了、MAX里保存的硬件配置也没了。我现在的习惯是任何操作前先做一个备份清单。需要备份的东西主要有三类NI软件的激活信息。如果用的是正版授权记录序列号和激活状态。NI License Manager里能导出许可证备份建议生成一份。MAX配置。打开NI Measurement Automation Explorer把已连接设备的通道配置、任务配置、系统配置截图或导出保存。特别是PXI机箱的触发路由、cRIO控制器的IP设置这些配置重建非常麻烦。项目依赖清单。工程里用了哪些NI模块、哪些驱动版本最好列一个表格。这样卸载后重新安装时可以按清单装回来不会漏掉。另外建议用“控制面板-卸载程序”查看已安装的NI软件完整清单截图保存。后面清理残留时你需要知道这台机器原本到底装了什么。2.2 停止NI相关服务和进程卸载过程中最常见的失败原因就是文件被占用。NI的大量后台服务会在开机时自动运行比如NI Application Web Server、NI License Manager、NI PSP Server Locator、NI Update Service这些。如果你不把它们停掉卸载器删除文件时就会报访问拒绝。操作顺序是这样的按Win R输入services.msc打开服务管理器。把所有名称带NI、National Instruments为前缀的服务逐个选中右键停止。在服务上双击把启动类型改为“禁用”防止卸载过程中服务被自动拉起。打开任务管理器结束所有带NI前缀的进程。如果电脑装了NI的采集设备驱动建议先正常弹出并拔掉USB设备再去停止服务。这里有个细节容易被忽略NI的TRACE Engine和NI WMI Provider这两个服务即使你结束了进程也可能在被调用的瞬间重新启动。停掉后最好再检查一次任务管理器确认没有NI进程残留再进行下一步。2.3 创建还原点给系统留一条退路这一步很多人觉得多余但实际遇到过一次卸载到一半系统崩溃你就会发现还原点有多重要。NI软件卸载过程中会大规模操作Windows Installer和注册表万一新老版本驱动冲突或者公共运行库被误删系统可能连设备管理器都打不开。创建还原点的方法很简单在“此电脑”上右键选择“属性”。进入“系统保护”选择系统盘点击“创建”。输入一个清楚的还原点名称比如“卸载NI_LabVIEW_2020前”。我个人的建议是如果电脑里有PXI系统或cRIO控制器相关配置且设备很贵、配置很难重建直接再做一次磁盘镜像备份也不为过。磨刀不误砍柴工。3. 常规卸载的正确打开方式3.1 首选用NI Package Manager卸NI Package ManagerNIPM是NI后来主推的包管理工具它最大的价值是维护了已安装软件包之间的依赖关系。以前用Windows Installer卸载经常出现“这个组件被其他产品引用”的报错NIPM会把整棵依赖树都理清楚。具体步骤打开NIPM在左侧选择“已安装的软件INSTALLED PRODUCTS”。勾选需要卸载的软件。如果多个软件都要卸可以一次性全勾上但要注意版本依赖关系。点击右上角的“卸载UNINSTALL”按钮等待执行完成。根据提示重启电脑。使用NIPM时有一个很重要的经验把上层应用先勾掉驱动层后勾。NIPM虽然会处理依赖但如果你同时选中了LabVIEW和NI-DAQmx它可能会先卸驱动再卸LabVIEW导致LabVIEW的卸载过程找不到LIB文件夹直接报错。我习惯分两批操作第一批卸LabVIEW、TestStand这种应用层软件第二批再卸各类驱动和运行时。3.2 备选用Windows应用和功能卸载如果你的NI软件是老版本或者安装时根本没有接入NIPM那就得回到Windows自带的“应用和功能”里卸载。这一步看起来简单但有三个坑要注意。第一卸载顺序必须从上层往下层走。正确顺序是开发环境LabVIEW→ 测试管理TestStand→ 具体硬件驱动NI-DAQmx、NI-VISA→ 公共组件Common Runtime、License Manager。反着卸的结果往往是底层先删了上层卸载时找不到安装目录导致假卸载软件名称消失了文件全留在硬盘里。第二同一个硬件驱动的多个版本会同时出现在列表里。比如NI-DAQmx既有18.1又有15.5建议先把低版本卸掉再卸高版本。高版本通常覆盖了低版本的共享DLL如果高版本先卸低版本的卸载程序会因为缺失运行库而中断。第三每个软件卸载完成后先别急着卸下一个建议重启一次再继续。NI的驱动加载机制比较特殊卸载后驱动服务并没有立即停止重启才能让驱动彻底从内核卸载不然下一个软件卸载时还会碰到占用。3.3 命令行卸载方式适合批量环境如果你要处理的是几十台甚至上百台电脑比如产线上的工控机批量升级肯定不能一台台去点。这种情况下用命令行方式卸载就非常高效。NI老版本的卸载支持Windows Installer可以通过msiexec静默卸载。找出产品码的方法是打开注册表编辑器定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall。如果系统是64位32位软件的卸载项在HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall。逐个查看“DisplayName”找到NI相关软件后记录其“ProductCode”值。拿到产品码后用以下命令进行静默卸载msiexec /x {89FDC6A1-6C2B-4C42-B7D8-9A2F2410D25E} /qn /norestart参数说明/x表示卸载/qn表示无界面静默执行/norestart表示完成后不自动重启。对于新版本软件NIPM本身也提供了命令行支持。在命令行下执行nipm uninstall加上产品名可以卸载指定软件。比如nipm uninstall labview_2023_Q1 -u-u参数代表无人值守模式。这个方法我在现场维护时经常用比一个个打开界面快太多。不过小心一点命令行卸载不会弹出错误对话框一旦失败只会把错误码写进日志。所以批量操作时务必先跑完日志检查再推送给所有机器。4. 常规卸载之后用NI官方清理工具做深度清扫4.1 NI Cleanup Utility到底是个什么工具NI Cleanup Utility也曾经叫NI Clean Up Utility是National Instruments官方提供的一个免费小工具。它的用途非常明确扫描系统中与NI相关的文件、文件夹、注册表项、服务和驱动把常规卸载后留下的残余信息全部清掉。这个工具和第三方卸载软件最大的区别在于它完全了解NI软件自家的目录结构和注册表布局扫出来的内容都是有针对性的。它不是暴力删除而是知道哪些是残留、哪些必须保留。所以我的建议很直接只认官方的免费工具不要用其他“强力卸载”软件去扫NI。下载渠道有两个NI官网的下载中心直接搜索“NI Cleanup Utility”或者从NI官方支持页面进入下载页面。需要注意的是不要去第三方下载站更不要用网盘分享链接。官方工具免费放开下载任何要求“打赏”或“关注”后下载的版本都要警惕是否被植入恶意程序。4.2 使用流程与关键步骤整个工具的使用流程不复杂但每一步都有值得注意的细节先重复第2章的准备工作关闭NI进程和服务拔掉NI硬件设备。以管理员身份运行Cleanup Utility。工具会自动扫描已安装的NI产品、驱动和残留项界面会列出扫描结果。勾选需要清理的范围通常默认全选即可。点击清理后工具会执行文件删除和注册表清理。清理完成后工具会提示重启电脑务必重启不要跳过。实测下来这个工具处理得最干净的部分是注册表。它会把NI软件在HKLM\Software\National Instruments、HKLM\Software\WOW6432Node\National Instruments和HKCU\Software\National Instruments下残留的项删除。把常规卸载后“找不到卸载程序”的垃圾项目清理得很彻底。有一个小技巧如果你下载到的是带命令行的版本可以在清理时带参数生成日志。命令形如NICleanupUtility.exe --log日志会记录删除的每一个文件路径和注册表项。普通用户不需要逐条看但这个日志在你后续遇到问题需要找官方技术支持时非常有用。4.3 工具边界它不会替你做的三件事说清楚这个工具的边界反而能避免大家对它产生不切实际的期待。第一它不会清理你的用户数据。Documents\LabVIEW Data、My Documents\National Instruments下面的工程文件、VI文件、报表数据都会原封不动地留下。这不是缺陷而是有意设计避免误删你的工作成果。第二它不会清理NI硬件的固件。比如cRIO控制器、PXI机箱里的FPGA bit文件、智能相机里的固件这些存储在硬件非易失性存储器里的东西软件卸载完全不影响。你不用担心把NI软件卸了会导致设备变砖这是两个独立层面。第三它不会帮你解决硬件驱动的内核残留问题。部分老的NI驱动会在系统目录下释放sys内核文件如果这些驱动处于活动状态工具也无法删除需要你到设备管理器里手动卸载设备驱动。如果设备已经被识别为“未知设备”还要在设备管理器-查看-显示隐藏设备里找一遍。5. 卸载失败和残留问题我这样一步步排查5.1 有日志先看日志别瞎猜很多人在卸载报错后第一时间就去翻注册表这是最没有效率的做法。NI的每个安装卸载动作基本都有日志要么在临时目录要么在ProgramData下面。常见日志路径有C:\ProgramData\National Instruments\NIPackageManager\logs\C:\Program Files\National Instruments\NIUninstaller\logs\%TEMP%\NIUninstall\打开日志后优先搜索“Error”或者退出码。下面几个错误码我在实际工作中遇到频率很高错误码含义排查方向0x80070643Windows Installer无法正常执行检查Windows Installer服务是否启用0x80070005权限不足确认是否以管理员身份运行0x80070020文件正被占用检查NI服务和进程是否真的全部结束2755安装脚本损坏多半是安装缓存目录被清理过需要下载安装包重新修复5.2 手动清理残留文件与注册表项官方工具跑完之后仍然有残留这种情况在混合版本的老机器上确实存在。此时只能手动清理但必须遵循“先备份、后删除”的原则。文件层面优先检查这几个路径C:\Program Files\National InstrumentsC:\Program Files (x86)\National InstrumentsC:\ProgramData\National Instruments%APPDATA%\National Instruments注册表层面主要看以下位置HKEY_LOCAL_MACHINE\SOFTWARE\National InstrumentsHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\National InstrumentsHKEY_CURRENT_USER\SOFTWARE\National Instruments手动清理时我用的是“按图索骥”法不凭借记忆乱删而是先运行一次卸载安装包让它报出具体冲突的文件路径或注册表键名然后再去对应的路径排查。比如安装新版NI-VISA时提示“已有的NIVisaServer服务存在”我就直接去服务管理器里找到这个名字的服务并删除而不是把整个NI注册表目录统统干掉。这里特别强调一个容易误伤的点National Instruments目录下除了软件本体还包含设备校准数据、仪器驱动文件。如果你在清理之后又重新安装了同型号仪器这些校准数据宁可保留也不要删。只删软件版本相关、DLL和exe文件就好。5.3 重装新版时反复报“旧版仍存在”怎么办这个问题的隐蔽性很高NIPM已经显示软件全部卸载完文件也清理干净了但安装新版时就是提示旧版残留。碰到这种情况问题多半出在NIPM自己的状态数据库里而不是文件系统。解决思路是进入NIPM安装目录找到它的本地数据库文件一般在C:\ProgramData\National Instruments\NIPackageManager\packages下备份后清理掉相关包记录。或者更简单直接在NIPM菜单里执行“验证安装VERIFY”操作让它重新比对实际已安装软件和数据库记录的差异。验证完成后如果发现不一致NIPM会自行修复状态这时候再重新运行卸载通常就能把假残留清掉。如果验证也没有效果就需要在注册表的Uninstall键下搜索包含“NI”的显示名称看看是不是有孤儿卸载条目没有清除干净。这类键值大多藏在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall下Windows以哪个用户身份运行的卸载程序就可能把条目写到哪个用户下。5.4 最后兜底系统还原和干净重装如果尝试了以上所有方法NI软件还是在系统中留有不稳定因素比如其他非NI软件也出现打不开的情况那么最理性的选择就是恢复系统还原点。这也是为什么我在第2章强调创建还原点的原因。恢复还原点会丢失还原点创建之后安装的所有软件和设置但如果卸载NI软件过程中破坏了系统级运行库恢复系统往往比继续清理更快。还有一种场景是机器上装了非常多NI组件牵扯到多种硬件不支持重装此时最稳妥的做法就是通过系统镜像做一次干净恢复然后从备份清单里按需装回软件。这个选择听起来很“笨”但实际上的时间成本远低于和残留问题反复缠斗。6. 这些年实际踩过的坑和最终沉淀的做法6.1 第三方卸载工具要慎用尤其是带“强力卸载”字样的我理解大家看到“强制卸载”功能时的那种想要省事的心情但第三方卸载工具在处理NI这类带硬件驱动的软件时经常会把服务端的驱动级信息直接删掉。表面看卸得很干净实际上设备管理器里的NI硬件驱动已经被破坏后续想再装回原版驱动都很困难。NI自己的工具确实比较“温和”但它懂NI软件的卸载顺序和依赖逻辑这是第三方工具没法比的。所以我的经验是NI官方体系内的软件优先用官方卸载工具实在要动注册表也是先排查看清楚再动而不是直接用“强制卸载”一把梭。6.2 换大版本前建议“清场”裸奔升版本最容易翻车很多时候大家不只是单纯想卸载NI软件而是想从LabVIEW 2020升级到LabVIEW 2023。这种场景下直接在两版NI软件同机共存风险非常高。NI不同大版本之间有很多同名DLL文件后者会直接覆盖前者导致旧工程打开后加载到新版本库文件而崩溃。我现在固定操作流程是记录当前已安装NI软件的清单和激活信息。按依赖顺序卸载旧版本全部NI软件。运行NI Cleanup Utility清理残留。重启后手动检查残留文件与注册表。再安装新版本NI软件。用备份清单逐个恢复驱动和模块最后重新激活授权。一套流程走下来虽然耗时大半天但基本能保证新系统环境的稳定不至于第二天上线又冒出兼容性问题。6.3 团队批量维护时把卸载步骤脚本化如果负责的设备数量超过十台靠手工去一台台走上面的流程根本不现实。我的建议是把卸载流程脚本化尤其是在产线设备镜像统一的情况下直接用批处理结合NIPM命令行和msiexec静默卸载可以大幅压缩维护窗口。脚本大致逻辑是# 先停服务 net stop NIApplicationWebServer net stop NILicenseManager # 卸载上层软件 nipm uninstall labview_2023_Q1 -u # 卸载驱动 nipm uninstall nidaqmx_2023_Q1 -u # 对老版本用msiexec卸载 msiexec /x {89FDC6A1-6C2B-4C42-B7D8-9A2F2410D25E} /qn /norestart执行完后安排一次重启再远程推送NI Cleanup Utility的静默清理。需要注意的是产线电脑上通常有其他工装软件依赖NI运行时批量卸载前我至少会先确认一遍哪些机器必须保留NI-VISA或NI-DAQmx避免一锅端把还在正常跑的测试工位都给卸废了。6.4 想清楚这个问题卸载就不再麻烦其实NI软件难卸载的根源并不在于系统复杂到没办法处理而在于我们经常把它当成一个普通软件去卸载忽略了它的组件化特性和依赖关系。只要理解底层逻辑先把进程和服务管好再按依赖顺序卸载最后用官方工具做收尾清扫这套方法论放在任何版本的LabVIEW、NI-DAQmx上都成立。我自己现在遇到NI软件卸载问题第一反应已经不是“完蛋了”而是照着固定流程一步步走。流程跑顺了反而觉得比很多桌面软件的卸载更可控至少你知道每一步会动到系统哪些位置出了状况也能顺着日志倒推回去。希望这篇文章能帮你少踩几个坑如果实际操作中还有更好用的方法也欢迎按自己的经验再补充调整。
返回列表