由于一个项目需要用到Emgu CV,但是在使用过程中出现了如下问题,无法加载DLL“opencv_core242”:
这次我就利用Process Monitor这一神器来解决该问题。
首先介绍一下Process Monitor,Process Monitor一款系统进程监视软件,总体来说,Process Monitor相当于Filemon+Regmon,其中的Filemon专门用来监视系统 中的任何文件操作过程,而Regmon用来监视注册表的读写操作过程。 有了Process Monitor,使用者就可以对系统中的任何文件和 注册表操作同时进行监视和记录,通过注册表和文件读写的变化, 对于帮助诊断系统故障或是发现恶意软件、病毒或木马来说,非常 有用。 这是一个高级的 Windows 系统和应用程序监视工具,由优秀的 Sysinternals 开发,并且目前已并入微软旗下,可靠性自不用说。(该介绍转载自百度百科,小小偷下懒),该软件的详细使用教程网上也有很多,可以自行搜索学习,这里就不赘述了。
接下来进入正题:
先获取到要监视的进程,如果是有窗口的软件,可以用上图1的方式直接选中软件窗口进行监视,还可以用PID、进程名称等,这次是个网站项目,没有窗口,所以我的步骤为:
我先通过调试时的端口查询出PID,我的工程占用的端口为4200,在CMD中输入netstat -aon|findstr "4200"查询,发现PID为6036,再通过任务管理器查出进程名为WebDev.WebServer40.exe(任务管理器PID列可通过菜单栏-查看-选择列添加)![]()
![]()
- 打开Process Monitor,添加过滤,如下图所示,然后重启调试,Process Monitor就出现一大堆数据,大致浏览找出结果列连续出现NAME NOT FOUND的地方,可以发现进程在各种地方找opencv_core242.dll文件,但都未找到,于是有了上述报
- 在工程的bin文件夹中加入opencv_core242.dll文件(从上图中可以看到进程查找过该文件夹地址D:\Documents\Visual Studio 2012\Projects\WebApplication1\WebApplication1\bin),重新运行,但任然报同样的错
- 从下图可看出opencv_core242.dll文件先是被成功找到,但又缺少cudart32_42_9.dll文件,找不到cudart32_42_9.dll就又开始找opencv_core242.dll,而且还又找不到了,于是报错(后来没去工程的bin目录找,这不是找抽吗
,其它地方又没有,当然找不到)。
- 当时就是明明工程里加了opencv_core242.dll,却又报找不到该dll文件才束手无策
,直到找到了Process Monitor神器。。。。。
- 好了,既然看出来是缺少cudart32_42_9.dll文件就再加入工程bin文件夹呗
![]()
- 加入cudart32_42_9.dll完,又是同样报错,这次轮到npp32_42_9.dll了,继续加,再运行。。。又来opencv_imgproc242.dll,再加,再运行。。。。再加。。。不对,成功啦
结束语
虽然这个该死的问题困扰了我好久,但终究被我解决了,通过这次事,我想所有dll文件缺失的问题都能通过这个方法成功解决
这个方法也可以用于检查出工程实际所需要调用的dll文件,然后删除不需要的dll文件,精简工程大小,强迫症的福音![]()