虽然Halcon 20.11已经不算最新版本但直到今天它依然是很多视觉项目里比较稳的一个选择。不过这颗“稳”字在安装第一步就经常给新人来一个下马威——双击安装包还没看到欢迎界面直接弹出一个灰底红叉的“NSIS Error”对话框。有些人点掉重试安装继续了有些人怎么点都是同一个结果最后只能对着屏幕上那行英文发呆。先说清楚一件事NSIS 是 Nullsoft Scriptable Install System 的缩写Halcon 的 Windows 安装包就是用 NSIS 这套开源脚本系统打的包。所以报“NSIS Error”并不是 Halcon 自己的安装逻辑坏了而是 NSIS 安装器在解压、写临时文件、或者执行脚本的时候出了岔子。搞明白这一点思路就不会乱我们不是去修 Halcon而是去治 NSIS 的运行环境。这篇内容我按照自己踩坑和帮别人远程解决问题的经历从原理到实操完整走一遍。不管你是刚下载完安装包还是已经卡在报错弹窗上反复折腾照着下面的步骤做大概率能顺利装完。文章后面还附了一份常见问题和排查速查表方便你以后遇到同类软件安装报错时直接翻。1. 先搞清楚NSIS_Error到底在说什么很多人看到“NSIS Error”就觉得是安装包坏了其实不全是。NSIS 打包的安装程序在运行时本质上是一个自解压壳加一套脚本解释器它先把压缩在安装包里的文件释放到临时目录然后按脚本顺序执行复制、写注册表、创建快捷方式、启动子程序这些动作。1.1 NSIS对于安装包意味着什么你可以把 NSIS 想象成一个“拆箱机器人”。机器人本身很小装在一个大箱子安装包里箱子里堆满了各种零件Halcon 的程序文件、SDK、示例、文档。安装过程就是机器人先把自己启动起来然后把零件从箱子里一件件搬出来放到指定位置最后还要把包装清单注册表、环境变量写好。这个类比里最容易出问题的是前面两步机器人能不能顺利把自己启动起来以及能不能正常拆箱。NSIS 报错大多数时候就是这两步卡住了。原因一般集中在几个方向安装包本身不完整、临时目录被限制或写不进数据、杀毒软件在安装包释放文件的瞬间强行拦截、当前用户权限不足以创建安装所需的目录和注册表项。1.2 报错分类乱码弹窗、闪烁即退、命令行退出码NSIS 的报错呈现方式不太一样但本质上都是一回事。常见的有三类弹窗直接提示NSIS Error下面带一行英文。最常见的是Error writing temporary file. Make sure your temp folder is valid翻译过来就是“写临时文件失败确认临时文件夹有效”。安装程序一闪而过没有任何提示连弹窗都没有。这种情况多半是安装包在窗口创建之前就已经初始化失败或者被杀毒软件直接干掉了。双击后有进度条或错误代码提示但随后安装回滚。这种通常是脚本执行到一半失败例如没有权限写Program Files、磁盘空间不足、或者旧版本残留导致文件被占用。碰到第一类和第二类先不要急着重下安装包大概率是环境和操作方式的问题。第三类则需要按后面章节的方式逐步排查。2. 动手之前把环境收拾干净很多人在安装报错之后的第一反应是换一个下载源重下安装包结果装了好几遍还是同一个报错。我自己的经验是真正需要重新下载的情况只占两成剩下八成都是环境问题。所以先在环境上花十分钟做一次检查比反复换源高效得多。2.1 下载完整性校验哈希别信“下载工具续传”先讲最容易被忽略的一点安装包下载不完整。Halcon 20.11 的安装包体积不小如果用浏览器普通下载断网续传很容易出现文件缺失。浏览器提示“下载完成”不代表文件完整NSIS 安装包一旦尾部数据缺失第一次运行就会因为 CRC 校验失败而报错。校验方式很简单在 MVTec 官网或授权的下载渠道看到安装包的同时通常旁边会附一个 SHA256 校验值。下载完后在文件所在目录打开 PowerShell执行Get-FileHash .\halcon-20.11.0.0-windows.exe -Algorithm SHA256然后把算出来的哈希值跟官网给的对照。如果一致说明安装包本身没问题如果不一致直接删除重新下载。这里建议用普通浏览器下载不要用那些带“多线程加速”的下载器它们恰恰是文件损坏的高发区。注意不要从非官方渠道下载 Halcon 安装包。非官方渠道的包可能有内容被替换过算出来的哈希值对不上官网而且安全风险极大。2.2 杀毒软件和Defender能关就关不是玄学NSIS 安装器的工作方式比较特殊它会先往临时目录释放一个 exe然后再用这个 exe 继续执行安装。这个“先释放再运行”的行为在很多杀毒软件的眼里跟恶意程序的行为特征非常相似。尤其是 Windows Defender 的“实时保护”和第三方杀毒的“行为防护”经常在安装包释放临时文件的一瞬间动手拦截。拦截的结果就是 NSIS 等不到释放出来的文件直接报Error writing temporary file或者干脆闪退。我自己遇到过的案例里接近一半都是 Defender 的实时保护导致的。所以如果你确认安装包哈希没问题先试试临时关闭实时保护打开 Windows 安全中心进入“病毒和威胁防护”。点击“管理设置”关闭“实时保护”。如果你是 Win10 或 Win11 专业版以上可以在“排除项”里直接添加安装包所在目录或安装包文件本身不用全程关闭防护。如果你用的第三方杀毒比如 360、火绒之类的安装期间建议直接退出。这类软件对 NSIS 脚本的敏感度普遍高误拦概率大。安装完成后再启动防护不影响正常使用。2.3 权限、路径和临时目录的坑第三个常见坑是权限和临时目录。先看权限。Halcon 的默认安装路径是C:\Program Files\MVTec这个目录在 UAC 机制下属于高权限保护区域。如果你当前登录的账户不是管理员或者虽然叫“管理员”但 UAC 降权没给足安装器在往这个目录写文件的时候就会失败然后回滚并报 NSIS 脚本错误。解决办法是右键安装包选择“以管理员身份运行”并且注意看 UAC 弹窗是否出现如果没弹可能是组策略或企业环境限制了提权。再看临时目录。安装器释放临时文件用的是系统%TEMP%目录大部分情况下是C:\Users\你的用户名\AppData\Local\Temp。如果这个目录被磁盘清理、安全软件或者某些优化工具清理掉了应有的写权限或者你的系统用户名是中文部分对中文路径支持不好的 NSIS 脚本就会出问题。校验临时目录是否正常可以在“运行”窗口输入%TEMP%回车看看文件夹能不能正常打开再尝试在文件夹里新建一个文本文件并删除。如果无法新建或删除说明这个目录权限异常需要手动修复权限或者直接跳到后面第 4 部分看“临时目录搬家”的操作。3. 一步一步装从双击到进入HDevelop环境检查完了接下来是一套我自己实测下来成功率比较高的安装流程。这套流程不保证 100% 一次过但能把大多数常见报错挡在门外。3.1 标准安装流程回顾Halcon 20.11 的安装向导本身不复杂但有几个细节容易被人忽略我按顺序写一下右键安装包选择“以管理员身份运行”。这一步同时承担了提权和绕过部分启动拦截的功能。安装语言界面保持默认即可一般会自动匹配系统语言没有中文就选英文不影响功能。选择安装组件时除非硬盘极度紧张否则建议全选。特别是“Deep Learning Tool”和“Image Acquisition Interface”前者是深度学习的推理工具后者是连接相机和采集卡的接口层后面项目里要用到的时候再补装会比较麻烦。安装路径保持默认也就是C:\Program Files\MVTec。不要为了“省空间”把它装到中文路径、带空格的目录或者移动硬盘上后续编译 C 或 C# 工程时路径里的特殊字符会给你带来意料之外的麻烦。等进度条走完。安装完成后建议重启一次电脑再开始使用确保环境变量和 DLL 注册全部生效。3.2 双击无反应时怎么办如果你双击安装包后什么反应都没有任务管理器里也看不到安装进程先别急着双击第二次。多次重复启动只会堆积僵尸进程让情况更乱。正确做法是打开任务管理器在“进程”或“详细信息”里找有没有halcon-20.11或NSIS相关进程有就结束掉。然后按住Shift键的同时右键安装包选择“复制为路径”再以管理员身份打开命令提示符把路径粘贴进去回车运行。命令大致长这样C:\Users\你的用户名\Downloads\halcon-20.11.0.0-windows.exe这样做能绕开 Windows 的“智能应用控制”或某些安全策略对双击启动的限制。如果命令行下能弹出安装界面说明问题出在系统的启动拦截上跟安装包本身无关。3.3 用命令行参数绕过部分校验NSIS 安装器支持若干命令行参数其中有几个在排障时非常有用。/NCRC跳过安装包损坏时的 CRC 自我校验。注意这个参数不是让你随便用的而是在你确认哈希值没问题的情况下用来绕开“明明文件完整却提示损坏”的误报。/S静默安装不显示界面。一般不推荐拿来排障因为看不到界面就不知道卡在哪一步。/D路径指定安装目录。注意这个参数必须放在命令行的最后而且路径不要加引号这是 NSIS 的语法限制。举个例子如果你已经用哈希校验确认安装包完整但双击仍然提示 CRC 错误可以这样执行C:\Users\你的用户名\Downloads\halcon-20.11.0.0-windows.exe /NCRC在这个思路下配合管理员命令行运行能解决相当一部分“无法验证数据”或“数据损坏”的报错。重要提示/NCRC只是绕过了校验如果你下载的包真有问题安装出来也大概率是残缺的装完别急着用一定要做第 5 部分的启动验证。4. 遇到NSIS_Error后的排查方法如果前面这些步骤都做了还是报 NSIS 错误那就说明问题不是单一原因需要按系统性地排查。我把自己处理过的真实案例整理成一套排查流程我建议按顺序走一遍。4.1 按错误文本归类解决NSIS 的错误文本虽然不多但每一句都对应一个大方向。把常见的几类列出来对比一下方便你快速定位报错文本关键词实际含义优先排查方向Error writing temporary file临时文件写入失败杀毒拦截、临时目录权限CRC check failed文件完整性校验失败重新下载、验证哈希Error launching installer安装器无法启动子进程杀毒拦截、UAC 权限Installation aborted安装被异常终止磁盘空间、旧版残留、注册表Error opening file for writing写入目标目录失败管理员权限、路径含中文看到第一类和第二类优先检查杀毒软件和临时目录。看到第三类确认是不是以管理员身份运行。看到第四类和第五类重点检查磁盘剩余空间和旧版本残留。实操中还遇到过一种情况安装到一半进度条在某个组件上停了几分钟然后直接回滚。这种绝大多数是因为该组件对应的文件被杀毒软件隔离安装程序写不进去。解决办法是先把杀毒软件退出再清理掉隔离区里被扣押的 Halcon 文件最后重新安装。4.2 清理旧版本残留的正确姿势如果你之前装过 Halcon 的旧版本装新版时很容易被旧版残留卡住。Halcon 的安装器会检测系统里是否已经存在 MVTec 相关组件如果检测到旧版 DLL 被占用或注册表残留就可能中止安装或回滚。手动卸载的时候很多人以为从控制面板卸载完就干净了实际上还有几个地方会留下旧版痕迹C:\Program Files\MVTec目录下可能残留文件卸载后手动删掉整个 MVTec 目录。C:\ProgramData\FLEXnet或C:\ProgramData\MVTec下可能残留旧版许可证文件不影响安装但影响启动。注册表HKEY_LOCAL_MACHINE\SOFTWARE\MVTec和HKEY_CURRENT_USER\SOFTWARE\MVTec下的键值如果在卸载后仍然存在用注册表编辑器手动删除。清理注册表之前一定要先备份或创建系统还原点。不要乱删只动 MVTec 相关的键。我见过有人为了清理残留把整个 SOFTWARE 注册表删出问题来的那就不值得了。4.3 临时目录搬家的可操作方法如果你已经确认杀毒软件没拦截、权限也没问题但安装还是报临时目录错误那大概率是系统%TEMP%目录本身不健康。这时候最省事的办法不是修权限而是直接把临时目录换到一个全新位置。步骤很简单用Win R打开运行窗口输入sysdm.cpl进入系统属性在“高级”选项卡里点击“环境变量”然后把TEMP和TMP这两个用户变量都改成同一个新建目录比如C:\Temp注意目录里不要有中文和空格。改完之后重启一次让所有进程都读到新路径再重新运行安装包。这个方法之所以有效是因为很多 NSIS 安装器在启动时要检查临时目录是否存在、是否可写。某些精简版系统或经过“一键优化”的 Windows干脆把临时目录的权限改成了只读或者用 ramdisk 软件映射了临时目录但服务没起来都会导致 NSIS 报错。把临时目录改到实体磁盘上是最直接粗暴的解法。5. 安装完成后License与首启动验证安装只是第一步装完能不能真正跑起来还要看 License 是否能正常加载、DLL 是否被正确注册。我自己曾经遇到过一种情况安装全程没有报错但打开 HDevelop 时提示找不到许可证过了半小时才发现是 License 文件放的目录不对。5.1 30天试用和License文件怎么放Halcon 20.11 安装完成后默认会进入 30 天试用期。这个试用期不需要激活系统会在你首次启动 HDevelop 或运行 Halcon 相关程序时自动开始计时。试用期内功能上基本没有阉割深度学习、测量、匹配这些模块都能正常调用。如果你有正式的 License 文件通常是一个.dat文件把它放到C:\ProgramData\MVTec\license目录下然后重启 HDevelop 即可生效。注意新版 Halcon 的许可服务统一走 MVTec License Manager如果你同时装过多个版本的 HalconLicense 文件是共用的不需要为 20.11 单独配置。需要提醒的是“30 天试用”和“License 文件”是两套机制试用期结束前如果还没放正式 LicenseHalcon 会提示许可证过期或无法获取授权。这属于正常的授权机制安装阶段不需要额外处理。5.2 验证安装是否真的成功安装完成并配置好 License 之后建议做两件事验证安装是否真的成功而不是等到工程项目编译到一半才发现环境有问题。第一件事打开 HDevelop随便写一行读图脚本比如read_image (Image, printer_chip/printer_chip_01) get_image_size (Image, Width, Height)如果 HDevelop 能正常读图并返回尺寸说明基础运行库和许可证都没问题。第二件事检查环境变量。打开命令行执行echo %HALCONROOT%如果输出的是类似C:\Program Files\MVTec\HALCON-20.11-Progress的路径说明安装器已经正确写入了环境变量。如果这个变量的值为空说明安装脚本可能在最后一步没执行成功这时候即使 HDevelop 能打开后续用 C 或 C# 调 Halcon 的 DLL 时也会出现找不到halcon.dll的麻烦。补设环境变量的操作很简单在系统环境变量里新建HALCONROOT指向安装目录即可。6. 我在实际安装中积累的几点心得分享一些没法归到具体步骤里、但确实能帮你少走弯路的经验。这些都不是官方文档里会写的全是我自己折腾出来的。6.1 典型问题速查表为了方便你快速定位我把安装过程中最常遇到的问题整理成一张表你可以直接按图索骥现象最可能的原因对应处理双击安装包无反应杀毒拦截或智能应用控制命令行启动临时关闭杀毒弹窗提示Error writing temporary fileDefender 拦截释放文件关闭实时保护或添加排除项提示CRC check failed下载包不完整或哈希不一致验证哈希重新下载进度条中途回滚磁盘空间不足或旧版残留清理磁盘卸载旧版并清注册表安装成功但 HDevelop 找不到许可证License 文件路径不正确放到C:\ProgramData\MVTec\license编译 C# 工程时找不到 HALCON 相关 DLL环境变量未配置检查并设置HALCONROOT6.2 写给后来人的经验安装 Halcon 这类大型工业软件心态上别急一次装不进去不代表软件有问题。我帮人远程解决过很多次 NSIS 报错最后排查出来的原因千奇百怪有人的杀毒软件把安装包释放出来的临时文件当成木马隔离了有人刚做完系统“优化”把临时目录的写权限改没了有人用公司域账户登录UAC 权限被域策略锁死管理员密码也不知道还有人干脆是被旧版本卸载程序卡住安装器一检测到残留就直接中止。在这些案例里真正需要重新下载安装包的只有一两个。大多数情况下照着第 2 部分的“环境收拾”再配合第 4 部分的“系统排查”都能把问题解决。如果你是按公司配发的电脑安装装之前先确认有没有统一的权限策略省得在 UAC 和杀毒这里来回折腾。还有一个小细节如果安装完成后你打算把安装包删掉腾空间先别急。至少保留一周等 HDevelop、深度学习工具、相机接口这些都验证过一遍再删。一旦某个组件在项目里用不上、后面又要补装安装包不在手边又得重新下载一遍那才叫浪费时间。
