C#DllImport调用在一台计算机上抛出异常,但在另一台计算机上运行

时间:2016-09-28 06:24:29

标签: c# c dll dllimport

运行以下引用非托管DLL(用C编写)的C#应用​​程序时,我得到一个DllNotFound异常,其中包含以下信息:

  

其他信息:无法加载DLL'C:\ Windows \ System32 \ myLib.dll':找不到指定的过程。 (HRESULT异常:0x8007007F)

我尝试了什么:

  • 我已经验证了DLL存在于预期路径中(事实上,当DLL不存在时,我会收到不同的错误消息)
  • 我已将exe和随附的dll复制到另一台计算机(在同一路径中),并且它没有问题。
  • 我已经将DLL复制到System32目录(并在那里引用了它),如此处的某些其他答案所示。
  • 我仔细检查了访问权限,并禁用了MS Security Essentials。
  • 我确保平台目标匹配。

这令人困惑,因为加载DLL所需的依赖项似乎很少。

2 个答案:

答案 0 :(得分:3)

不要将您的DLL复制到系统文件夹。这属于系统,你不应该修改它。从已放置的任何系统文件夹中删除这些DLL。

而是将您的DLL放在与可执行文件相同的目录中。之后,需要的另一步是确保任何依赖项(通常是VC运行时)都可用。根据您要如何部署,这可能涉及在任何目标计算机上安装VC可再发行组件包。

答案 1 :(得分:0)

旧版本的依赖项(本例中为Jungo DLL)没有导出与新版本相同的一组函数,但是已经安装到错误的机器上。复制新版本解决了问题。

因此,虽然依赖文件存在于两台计算机上,但必要的导出函数集却不存在。 C#在DLL A上指定了“无法找到程序”错误,从技术上讲,它是依赖的依赖。

事实证明,依赖性walker在识别依赖关系的方面非常有用,并且表明其中一个依赖项缺少导入。