Bon*_*arp 5 c# dllnotfoundexception dllimport
我在尝试dll从我的应用程序中使用非托管代码时遇到了一些困难(用C#framework 4.0编写).我正在使用dll导入如下
[DllImport(@"C:\MGW_SDK.dll", EntryPoint = "fInicializaSDK")]
public static extern int fInicializaSDK();
Run Code Online (Sandbox Code Playgroud)
奇怪的是,从我的开发环境(Windows XP)调用时,它工作得很好,但是当在生产服务器(Windows7)上时,它会生成以下异常:
System.DllNotFoundException:无法加载DLL' C:\MGW_SDK.dll':找不到指定的模块.于:(0x8007007E从HRESULT异常)Comtpaq.AdminPack.SDKWrapper.fInicializaSDK()在Comtpaq.AdminPack.AdminPaqRepository.InitializeSDK()中C:\Work\AgroIn\AdminPaqRepository.cs:第30行
我已经运行了Dependency Walker,它将以下依赖关系显示为冲突:C:\windows\system32\SHLWAPI.DLL
我已经尝试将其复制dll到我的部署目录
该MGW_SDK.dll是c:\(作为路径说)
我已经安装了C运行时库
我还注意到一些有趣的东西:在例外情况下,开发路径正在显示 C:\Work\AgroIn\AdminPaqRepository.cs:line 30
还有什么可能是这里的问题?
我用一个extern/ dllimport我使用的方法构建了一个小型控制台应用程序MGW_SDK.dll并且运行它没有问题(没有DllNotFoundException任何问题),所以这似乎与我正在构建的应用程序(WCF服务)有关.此服务托管在WAS上,但我仍然无法找到问题.
嗯,这是一个非常棘手的问题.它与dll依赖关系无关,也与dll位置无关.这不是我怎么称呼的DllImport.这是一个权限问题.
基本上这个问题是通过在dll所在的文件夹中取出然后再添加执行权限来解决的.看到这篇文章(Wayback机器).
解
Oracle 9.2客户端软件要求您通过以下步骤为Oracle Home提供Authenticated User特权:
以具有管理员权限的用户身份登录Windows.
从"开始"菜单启动Windows资源管理器,然后导航到该
ORACLE_HOME文件夹.这通常是"Oracle"文件夹下的"Ora92"文件夹(即D:\Oracle\Ora92).右键单击ORACLE_HOME文件夹,然后从下拉列表中选择"属性"选项.应出现"属性"窗口.
单击"属性"窗口的"安全"选项卡.
单击"名称"列表中的"经过身份验证的用户"项(在Windows XP上,"名称"列表称为"组或用户名").
取消选中"允许"列下"权限"列表中的"读取和执行"框(在Windows XP上,"权限"列表称为"经过身份验证的用户的权限").
重新检查"允许"列下的"读取和执行"框(这是您刚刚取消选中的框).
单击"高级"按钮,在"权限条目"列表中,确保您看到其中列出的"已验证用户":
Run Code Online (Sandbox Code Playgroud)Permission = Read & Execute Apply To = This folder, subfolders and files如果不是这种情况,请编辑该行并确保"应用到"下拉框设置为"此文件夹,子文件夹和文件".这应该已经正确设置,但重要的是验证这一点.
单击"确定"按钮,直到关闭所有安全属性窗口.光标可能会将小时玻璃显示几秒钟,因为它会将您刚刚更改的权限应用于所有子文件夹和文件.
重新启动计算机以确保这些更改已生效(重要).
重新执行应用程序,它现在应该工作.