DllImport 生成 System.DllNotFoundException

2023-11-26

我在尝试使用非托管代码时遇到一些困难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 主目录的用户权限:

  1. 以具有管理员权限的用户身份登录 Windows。

  2. 从“开始”菜单启动 Windows 资源管理器,然后导航至ORACLE_HOME文件夹。这通常是“Oracle”文件夹下的“Ora92”文件夹(即D:\Oracle\Ora92).

  3. 右键单击 ORACLE_HOME 文件夹,然后从下拉列表中选择“属性”选项。应该会出现一个“属性”窗口。

  4. 单击“属性”窗口的“安全”选项卡。

  5. 单击“名称”列表中的“经过身份验证的用户”项(在 Windows XP 上,“名称”列表称为“组或用户名”)。

  6. 取消选中“允许”列下“权限”列表中的“读取和执行”框(在 Windows XP 上,“权限”列表称为“经过身份验证的用户的权限”)。

  7. 重新选中“允许”列下的“读取并执行”框(这是您刚刚取消选中的框)。

  8. 单击“高级”按钮,然后在“权限条目”列表中确保您看到其中列出的“经过身份验证的用户”:

      Permission = Read & Execute 
      Apply To = This folder, subfolders and files 
    

    如果不是这种情况,请编辑该行并确保“应用到”下拉框设置为“此文件夹、子文件夹和文件”。这应该已经正确设置,但验证这一点很重要。

  9. 单击“确定”按钮,直到关闭所有安全属性窗口。光标可能会显示沙漏几秒钟,因为它将您刚刚更改的权限应用于所有子文件夹和文件。

  10. 重新启动计算机以确保这些更改已生效 效果(重要)。

重新执行应用程序,它现在应该可以工作了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DllImport 生成 System.DllNotFoundException 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐