【问题标题】:How to avoid 'Unable to load DLL' scenarios如何避免“无法加载 DLL”的情况
【发布时间】:2016-02-04 01:47:29
【问题描述】:

我正在尝试使用 Monogame 构建游戏。 Monogame 使用自己的一堆 DLL。然而,在其中一个 DLL 中存在对另一个 DLL 的依赖项(由于未安装,它可能不存在)。

更具体地说,当尝试利用 Monogame 的 DLL 的方法/类时

GamePad.GetState(PlayerIndex.One).Buttons.Back

产生此错误:

无法加载 DLL 'xinput1_3.dll':找不到指定的模块。 (HRESULT 异常:0x8007007E)

修复此错误并不难。用户需要安装正确的系统要求。

如何从前端告诉用户?我的目的是在继续运行游戏时通知用户“游戏手柄控制器因此被禁用,因为您的系统上没有安装 xxx”——因为游戏手柄是可选的。

在尝试使用该方法/类之前,有没有办法我可以发现这个问题(即,有没有办法我可以检查这个 DLL 是否存在 - 而不是非常具体的位置/文件路径)?

在整个应用程序周围设置try-catch 块是最好的方法吗?

有没有更好的方法来处理(常见的?)“无法加载 DLL”的情况?

我的主要目标是忽略任何 DLL 依赖问题,因为我计划在没有安装程序的情况下分发此游戏。此外,应该忽略任何丢失的非破坏游戏的 DLL。

【问题讨论】:

  • 为什么要让用户负担你应该做的事情?这就是安装程序的用途。 Steam 上的 XNA 游戏同时安装 XNA 和 .NET 运行时
  • 我刚刚读到您计划在没有安装程序的情况下进行分发,以及您打算如何忽略体面错误。考虑到您的应用程序类型,我认为这对您的用户群有些疏忽和不尊重
  • 完全同意你的看法。在 Steam 等官方商店发布时,这一点尤其重要。我之所以选择一个不需要(繁琐?)安装的移动可执行文件只是个人喜好。
  • (当我说 "ignore decency errors" 它应该是 "ignore dependency errors")-该死的 iPhone ;)

标签: c# dll monogame


【解决方案1】:

一种解决方案是在启动期间以编程方式检查所有系统文件夹中是否存在所需的 dll,并在它们丢失时提醒用户。

编辑:有一个更好的解决方案,使用 LoadLibrary() 函数检查,Check if a DLL is present in the system

【讨论】:

    【解决方案2】:

    您可以在运行应用程序之前检查所需的所有 .DLL 列表。 当然,你也可以依靠 try 和 catch 来获取你从来不知道的 DLL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多