【问题标题】:Missing DLL Problem缺少 DLL 问题
【发布时间】:2011-06-02 11:50:16
【问题描述】:

我有一个 C++ 本机应用程序,它是在 VS2005 (sp1) 下构建的,在机器 A 上。(调试模式) 现在,我需要在“干净”的计算机上运行这个应用程序,干净意味着它没有安装 VS。 当我将运行时文件夹从机器 A 复制到“干净”机器并尝试激活应用程序时,它需要重新安装应用程序。 显然缺少 DLL 导致了这个问题,因为在机器 A 上应用程序工作得很好,除了判断缺少哪些 DLL 之外,是否有针对此类问题的“干净”解决方案?也许是一个智能工具或安装程序,可以指示运行时缺少哪些 DLL?

谢谢, 立然

【问题讨论】:

  • 查看 Windows 事件日志。不要部署您的调试版本。

标签: c++ visual-c++ mfc


【解决方案1】:

为了完成这项工作,我将在干净的机器上下载并安装 Microsoft Visual C++ 2005 Redistributable 包。

然后我将创建应用程序的发布版本,并将该版本复制到干净的机器上。

【讨论】:

    【解决方案2】:

    您可以使用Dependeny Walkerhttp://www.dependencywalker.com/ 来查找它引用的标准DLL,但我不确定是否有一种简单的方法可以找出应用程序引用的COM DLL。

    或者(我不确定),您可以在机器 A(创建它的机器)上运行您的应用程序,并使用来自 http://www.sysinternals.comprocess viewer。它会告诉您进程加载了哪些 DLL。

    【讨论】:

      【解决方案3】:

      你有两个选择:

      1. 在目标“干净”计算机上安装“调试运行时”
      2. 在构建选项中,您可以选择“使用 CRT/MFC 作为静态库”

      【讨论】:

      • 选项 1 被明确禁止。调试运行时未获得重新分发许可。您必须安装完全许可的 Visual Studio(例如 VS Express)。
      【解决方案4】:

      当它告诉您缺少某些 DLL 时,它应该告诉您哪些 DLL。通常,您动态链接到 CRT,这意味着您可以静态链接到它,它应该可以解决问题。

      【讨论】:

      • 它没有告诉我缺少哪些 DLL(我希望如此),我得到的具体消息是:“应用程序未能正确初始化(0xc0150002)。单击确定以终止应用程序。
      【解决方案5】:

      您可以使用 ProcessExplorer 之类的工具来检查您的程序在其工作的机器上使用了哪些 DLL(或者,VS 中的“模块”窗口或 WinDbg 中的“lm”命令显示相同的信息)。然后检查是否可以在“干净”机器上的路径中找到它们中的每一个。

      【讨论】:

        猜你喜欢
        • 2012-12-18
        • 1970-01-01
        • 2023-01-22
        • 2011-10-09
        • 2011-04-15
        • 2020-09-01
        • 2014-08-31
        • 2010-09-18
        • 1970-01-01
        相关资源
        最近更新 更多