【问题标题】:DLL can't be accessed on some systems在某些系统上无法访问 DLL
【发布时间】:2017-07-06 16:09:19
【问题描述】:

我们的 C# / .NET 程序正在调用目标文件夹中的第三方 DLL (x.dll)。 x.dll 然后调用同一文件夹中的另一个第三方 DLL y.dll。在某些系统上,这不起作用,因为 x.dll 找不到 y.dll。 具有相同 dll 的相同程序可在大多数其他系统上运行,但如果它不起作用,我们无法找出系统的不同之处。我们检查了属性,这些 dll 没有被 Windows 阻止。病毒扫描程序也被禁用。

【问题讨论】:

  • .net 版本怎么样? x86 和 x64 的区别?
  • 使用 ProcessMonitor 并比较来自两个系统的跟踪,看看它们有何不同以及原因

标签: c# .net dll


【解决方案1】:

请通过Dynamic-Link Library Search Order 看看它适用于哪种情况。最可能的情况是启用了 SafeDllSearchMode 的标准 DLL 搜索顺序:

如果启用SafeDllSearchMode,搜索顺序如下:

  • 加载应用程序的目录。
  • 系统目录。使用 GetSystemDirectory 函数获取该目录的路径。
  • 16 位系统目录。没有函数获取这个目录的路径,但是搜索到了。
  • Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
  • 当前目录。
  • PATH 环境变量中列出的目录。请注意,这不包括由指定的每个应用程序路径 应用程序路径注册表项。 App Paths 键在以下情况下不使用 计算 DLL 搜索路径。

请注意,如果 DLL 是托管程序集(您没有提及它是),则适用 .Net 程序集搜索规则,请参阅How the Runtime Locates Assemblies。显然,GAC 也会对托管 DLL 起作用。

我只是给你一些指导,让你自己进行调查,因为你的帖子缺少相关信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2022-12-21
    • 1970-01-01
    • 2019-10-26
    • 2018-07-15
    • 2020-05-22
    • 2019-11-23
    相关资源
    最近更新 更多