C# DllImport生成System.DllNotFoundException
当我试图从我的应用程序(用C#framework 4.0编写)中使用非托管代码C# DllImport生成System.DllNotFoundException,c#,dllimport,dllnotfoundexception,C#,Dllimport,Dllnotfoundexception,当我试图从我的应用程序(用C#framework 4.0编写)中使用非托管代码dll时,遇到了一些困难。 我正在使用dll导入,如下所示 [DllImport(@"C:\MGW_SDK.dll", EntryPoint = "fInicializaSDK")] public static extern int fInicializaSDK(); 奇怪的是,当从我的开发环境(Windows XP)调用时,它工作正常,但在生产服务器(Windows 7)上时,它会生成以下异常: System.Dl
dll
时,遇到了一些困难。
我正在使用dll
导入,如下所示
[DllImport(@"C:\MGW_SDK.dll", EntryPoint = "fInicializaSDK")]
public static extern int fInicializaSDK();
奇怪的是,当从我的开发环境(Windows XP)调用时,它工作正常,但在生产服务器(Windows 7)上时,它会生成以下异常:
System.DllNotFoundException
:无法加载DLL“C:\MGW_SDK.DLL”
:找不到指定的模块。(HRESULT:0x8007007E的例外)位于Comtpaq.AdminPack.SDKWrapper.fInicializaSDK()
位于Comtpaq.AdminPack.AdminPaqRepository.InitializeSDK()
中的C:\Work\AgroIn\AdminPaqRepository.cs
:第30行
我已经运行了,它显示以下依赖项冲突:C:\windows\system32\SHLWAPI.DLL
我已经尝试将该dll
复制到部署目录
MGW\u SDK.dll
位于c:\
上(如路径所示)
我已经安装了C运行库
我还注意到一些有趣的东西:在例外情况下,开发路径显示C:\Work\AgroIn\AdminPaqRepository.cs:line 30
这里还有什么问题
编辑
我用MGW_SDK.dll
中使用的extern
/dllimport
方法构建了一个小型控制台应用程序,运行起来没有任何问题(没有DllNotFoundException
),因此这似乎与我正在构建的应用程序(一个WCF服务)有关。此服务托管在WAS上,但我仍然找不到问题。您尝试过使用吗
不知道这是否确实有效,但您是否尝试过在Win7 box上使用regsrv32或其他安装包注册MGW_SDK.DLL
另外,请尝试找出MGW_SDK.DLL的依赖项是否在Win7计算机上也可用(在系统上注册或在应用程序文件夹中注册都可以)C的根目录是UAC不允许您写入的地方之一。有时,请求从受保护区域读取的未呈现应用程序最终会从虚拟化的等效应用程序读取,而您的DLL将不在那里。尝试将DLL移动到另一个文件夹(不是C的根目录,也不是程序文件下的任何内容),看看是否解决了这个问题。如果是这样,你可以把它留在那里,或者(更好)在你的应用程序上放置一个清单,以防止虚拟化。好吧,这是一个非常棘手的问题。它与dll依赖项无关,也与dll位置无关。这不是关于我如何调用
DllImport
。这是一个权限问题
基本上,这个问题可以通过删除并重新添加DLL所在文件夹上的execute权限来解决。请参阅(回程机器)
解决方案
Oracle 9.2客户端软件要求您提供经过身份验证的 通过以下步骤,用户可以获得Oracle主页的权限:
ORACLE\u HOME
文件夹。这通常是“Oracle”文件夹下的“Ora92”文件夹(即D:\Oracle\Ora92
) Permission = Read & Execute
Apply To = This folder, subfolders and files
如果不是这样,请编辑该行,并确保“应用到”下拉框设置为“此文件夹、子文件夹和文件”。这应该已经正确设置,但您必须验证这一点生产操作系统和开发操作系统都是32位的。NET应用程序是为AnyCPU目标平台编译的?是的,两个操作系统都是32位的,它们被编译为AnyCPU,应用程序本身工作,就是这个组件让我感到痛苦。它是什么类型的应用程序?桌面,ASP.NET?这实际上是一个WCF服务。您是否尝试将所有必需的DLL放入应用程序文件夹中?只是为了确保它能找到它们。这对DllImport/PInvoke库有用吗?看起来它仅适用于CLI程序集。无法确定。我在谷歌上搜索了一下,但没有找到任何条目指定P/Invoke库是否有效。我认为值得一试。我在我有服务的地方运行它,但没有显示任何信息,但是当我在客户机上运行它时,它会显示进程。。。它是否需要一个窗口才能登录?WCFs如何?我尝试使用regsvr32注册dll,但它不起作用。模块“MGW_SDK.dll”无法加载。请确保二进制文件存储在指定的路径上,或对其进行调试。请检查二进制文件或依赖的.dll文件是否存在问题。找不到指定的过程。我在这里看到的唯一失败的依赖项(依赖项walker)是SHLWAP