我在尝试使用非托管代码时遇到一些困难dll
来自我的应用程序(用 C# 框架 4.0 编写)。
我正在使用dll
导入如下
[DllImport(@"C:\MGW_SDK.dll", EntryPoint = "fInicializaSDK")]
public static extern int fInicializaSDK();
奇怪的是,当从我的开发环境(Windows XP)调用时,它工作得很好,但是当在生产服务器(Windows7)上时,它会生成以下异常:
System.DllNotFoundException
: 无法加载DLL' C:\MGW_SDK.dll'
: 指定的模块无法找到。 (HRESULT 异常:0x8007007E)Comtpaq.AdminPack.SDKWrapper.fInicializaSDK()
at Comtpaq.AdminPack.AdminPaqRepository.InitializeSDK()
in C:\Work\AgroIn\AdminPaqRepository.cs
:line 30
我已经跑了依赖步行者,它显示以下依赖项存在冲突:C:\windows\system32\SHLWAPI.DLL
我已经尝试过复制它dll
到我的部署目录
The MGW_SDK.dll
is on c:\
(正如路径所说)
我已经安装了 C 运行时库
我还注意到一些有趣的事情:在例外情况下,开发路径正在显示C:\Work\AgroIn\AdminPaqRepository.cs:line 30
这里还有什么问题吗?
Edit
我仅使用其中一个构建了一个小型控制台应用程序extern
/dllimport
我使用的方法MGW_SDK.dll
并毫无问题地运行它(没有DllNotFoundException
无论如何),所以这似乎与我正在构建的应用程序(WCF 服务)有关。该服务托管在WAS上,但我仍然无法找到问题。
嗯,这是一个非常棘手的问题。它与 dll 依赖关系无关,也与 dll 位置无关。这不是关于我如何称呼DllImport
。这是一个权限问题。
基本上这个问题是通过删除然后添加回 dll 所在文件夹的执行权限来解决的。看本文(回溯机)。
Solution
Oracle 9.2 客户端软件要求您提供经过身份验证的
通过执行以下步骤获得 Oracle 主目录的用户权限:
以具有管理员权限的用户身份登录 Windows。
从“开始”菜单启动 Windows 资源管理器,然后导航至ORACLE_HOME
文件夹。这通常是“Oracle”文件夹下的“Ora92”文件夹(即D:\Oracle\Ora92
).
右键单击 ORACLE_HOME 文件夹,然后从下拉列表中选择“属性”选项。应该会出现一个“属性”窗口。
单击“属性”窗口的“安全”选项卡。
单击“名称”列表中的“经过身份验证的用户”项(在 Windows XP 上,“名称”列表称为“组或用户名”)。
取消选中“允许”列下“权限”列表中的“读取和执行”框(在 Windows XP 上,“权限”列表称为“经过身份验证的用户的权限”)。
重新选中“允许”列下的“读取并执行”框(这是您刚刚取消选中的框)。
-
单击“高级”按钮,然后在“权限条目”列表中确保您看到其中列出的“经过身份验证的用户”:
Permission = Read & Execute
Apply To = This folder, subfolders and files
如果不是这种情况,请编辑该行并确保“应用到”下拉框设置为“此文件夹、子文件夹和文件”。这应该已经正确设置,但验证这一点很重要。
单击“确定”按钮,直到关闭所有安全属性窗口。光标可能会显示沙漏几秒钟,因为它将您刚刚更改的权限应用于所有子文件夹和文件。
重新启动计算机以确保这些更改已生效
效果(重要)。
重新执行应用程序,它现在应该可以工作了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)