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 的相关文章

  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐