无法加载dll文件 - 异常0x8007007E

时间:2014-01-27 14:59:15

标签: c# .net dll

我正在使用C#中的National Instruments Measurement Studio,我在将应用程序部署到特定计算机(运行Windows 7)时遇到了一些问题。我试过在National Instruments论坛上问过,但还没有得到任何解决方案 - 这里有人可以给我一些提示吗?

基本上,我已在多台计算机上多次部署此应用程序,但在这种特殊情况下,我在运行程序时收到错误 -

  

“System.DllNotFoundException:无法加载DLL'nianlys.dll':找不到指定的模块。(HRESULT异常:0x80070007E)

  • 我确保nianlys.dll存在于C:\ Program Files中 (x86)\ National Instruments \ Shared \ Analysis。

  • 我确保存在libiomp5md.dll和LV110000_BLASLAPACK.dll,来自mkl.msm(nianlys.dll依赖于mkl.msm)的文件。 nianlys.dll也依赖于nimetautils.msm,但我不确定其中包含哪些dll。

  • 我确保通过以管理员身份运行setup.exe来安装程序(而不是运行生成的.msi,请参阅here)。

  • 通过Windows更新确保有问题的计算机是最新的.net框架更新。

  • 我尝试过多次重新安装程序,有时使用重新编译的安装程序。

  • 我尝试手动将64位nianlys.msm添加到安装项目中 - 这会引发错误,因为安装项目的TargetPlatform属性设置为x86。当然,32位版本已经存在于检测到的依赖项中。

  • 有趣的是,从C:\ Program Files(x86)\ National Instruments \ Shared \ Analysis中获取nianlys.dll的副本并将其插入到安装程序的目录中会引发不同的错误 - 在此case,错误是:

      

    “试图加载格式不正确的程序。(HRESULT异常:0x8007000B)”

  • 从另一台计算机(默认位置C:\ Program Files \ National Instruments \ Shared \ Analysis)获取64位版本的nianlys.dll副本并将其插入安装程序的目录中第三种类型的错误 - “System.DllNotFoundException:无法加载DLL'nianlys.dll':动态链接库(DLL)初始化例程失败。(HRESULT异常:0x8007045A)”。应该注意的是,在程序运行的计算机上安装程序之前,此.dll存在,但是目标计算机上的存在问题。

  • 使用相同的64位nianlys.dll并将其插入另一台计算机上找到的位置,C:\ Program Files \ National Instruments \ Shared \ Analysis,无法解决原始错误。

  • 更有趣的是,我试图在程序运行的计算机上重现错误 - 删除x64版本的nianlys.dll会抛出原始的HRESULT:0x80070007E错误,而删除x86版本会导致错误运行程序时出现的Windows安装程序。

  • 在没有问题的程序运行的计算机上,Windows任务管理器似乎没有指示程序是32位(程序名称上带有* 32后缀),尽管目标平台是设置为x86。从这一切看来,尽管目标平台只是x86,但是在x64和x86版本中使用了nianlys.dll存在一些问题。

关于我可以尝试解决这个问题的方法,我的想法已经不多了。

3 个答案:

答案 0 :(得分:6)

我怀疑即使 setup 适用于X86,项目本身也是 AnyCPU ,因此在64位系统上运行为64位进程,在32位运行时为32位进程系统。正如你所说的你的DLL在Program Files(x86)文件夹中我假设它只是32位,所以你应该将你的应用程序显式编译为x86。你的子弹#7引导我得出这个结论。

只是复制nianlys.dll 64位DLL似乎不起作用,因为它似乎依赖于它无法找到的其他DLL。 (子弹#8)。

答案 1 :(得分:3)

可能是由nianlys.dll的家属引起的。您可以使用系统内部工具之一the process monitor来诊断此问题。它可以捕获加载/卸载DLL活动,因此如果出现问题,您可以在日志中找到它。

使用此工具时务必使用过滤器,否则日志文件会很大。

答案 2 :(得分:0)

检查流程体系结构。您可以将其更改为x64而不是默认值x86。