2010-11-10 44 views
1

我在我的VB.net应用程序框架v3.5中使用TwainPro4.dll进行扫描。检测到加载程序锁twain

当我运行我的应用程序,我得到下面的异常,请告知检测

LoaderLock 消息:DLL“C:\ WINDOWS \装配\ GAC \ PegasusImaging.WinForms.TwainPro4 \ 4.0.22.0__80d669b8b606a2da \ PegasusImaging .WinForms.TwainPro4.dll'正在尝试OS Loader锁内的托管执行。不要试图在DllMain或图像初始化函数中运行托管代码,因为这样做会导致应用程序挂起。

+0

你得到这个错误,而调试或同时运行的应用程序?调试意味着你必须改变Visual Studio处理Loaderlock的方式。 – PradeepGB 2010-11-10 12:38:36

回答

2

我假设你的意思是当你调试你的应用程序时,你会得到这个消息。这个信息很重要。从MSDN:

“的loaderLock托管调试助手(MDA)检测尝试对拥有微软Windows操作系统加载器锁的线程执行托管代码的任何这样的执行是非法的,因为它可能导致死锁和。使用的DLL之前就已经通过操作系统的加载器初始化。“

现在,按(CTRL + d,E,让你可以在调试异常接口禁用LoaderLock MDA在调试模式下运行应用程序),然后打开Managed Debugging Assistants树并取消选中Loader Lock。

但是!这表示DLL被初始化或写入不正确。因此,再次从MSDN,:

通常,进程内的几个线程将死锁。其中一个线程可能是负责执行垃圾回收的线程,因此这种死锁可能会对整个过程产生重大影响。此外,它还可以防止任何需要操作系统加载程序锁定的额外操作,例如加载和卸载程序集或DLL以及启动或停止线程。

在一些不常见的情况下,它是也可能触发访问冲突或类似问题,在被初始化之前调用的DLL中触发

您可能想回到DLL的开发人员,看看他们批准的解决方案是什么。

来源