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

标签 c# .net dll

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

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

"System.DllNotFoundException: Unable to load DLL 'nianlys.dll': The specified module could not be found. (Exception from HRESULT: 0x80070007E)

  • 我已确保 C:\Program Files 中存在 nianlys.dll (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 的副本并将其插入程序安装目录会引发不同的错误 - 在此情况下,错误是:

    "An attempt was made to load a program with an incorrect format. (Exception from 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 似乎存在一些问题。

对于我可以尝试用什么样的方法来解决这个问题,我已经没有想法了。

最佳答案

我怀疑即使 setup 是针对 X86 的,但项目本身是 AnyCPU,因此在 64 位系统上作为 64 位进程运行,在 32 位系统上作为 32 位进程运行系统。正如您所说,您的 DLL 位于 Program Files (x86) 文件夹中,我假设它仅为 32 位,因此您也应该将您的应用程序显式编译为 x86。是您的第 7 号子弹让我得出了这个结论。

只是复制 nianlys.dll 64 位 DLL 似乎不起作用,因为它似乎依赖于它随后找不到的其他 DLL。 (项目符号 #8)。

关于c# - 无法加载 dll 文件 - 异常 0x8007007E,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21384067/

相关文章:

c# - 对方法参数的 BindAttribute 进行单元测试

c# - 尝试使用错误的 key 解密时 AesCryptoServiceProvider 的行为

Java : switching between dll depends on system architecture (32/64)

c++ - 内存中加载的 DLL 与 HDD 中加载的 DLL 之间的偏移量不匹配

c++ - 使用 Qt 制作几乎原生的 Windows 应用程序?

c# - 我应该如何在 Java 中复制 C#'s ' using' 语句的功能?

c# - 为什么XNA Write/ReadObject <Model>()不保留顶点/索引缓冲区数据?

C# 将 ListView 滚动到更新的项目

c# - .NET 中的静态类何时加载到内存中?

.net - Chromium-Edge HTML 渲染器是否有 WinForms 控件?