electron 开发使用了 ffi-napi 来调用了 C 函数的 dll 文件,在打包上线后,发现某些电脑上运行之后一直报错 Error: Dynamic Symbol Retrieval Error: Win32 error 126
如图所示:
排查了很多原因,有说是路径问题,有说是环境变量问题,但是这个问题只是小批量用户偶发的现象,按照教程修复之后一直没有效果,最终排查出来是因为有些用户的电脑没有 vc 的运行时,而调用的 dll 文件是在 vc 运行环境编译的,导致报错,所以将 vc 运行时的 exe 文件放到安装目录中,在安装过程中写一个自定义 nsh 脚本安装上这个exe,这些用户就可以正常使用了。
exe 下载链接:https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170
根据编译环境下在相应的运行时文件,一般使用 x64 就可以
然后在 nsh 脚本中写自定义脚本,nsh 自定义脚本可以自行网上搜索如何添加
!macro customInstall
ExecWait ‘$INSTDIR\resources\vcrunning\VC_redist.x64.exe /install /quiet /norestart’
!macroend
我是将这个exe放到 vcrunning 目录中了,可以根据自己的安装目录修改一些安装的路径, /install /quiet /norestart 参数指静默安装,这样的话在用户安装软件安装包的过程中,会静默帮用户安装一个vc 运行时,就可以正常的调用 C 的 dll 文件了。