应用程序无法正确启动(0xc000007b)

时间:2012-05-08 03:08:20

标签: windows delphi 64-bit

我有一个客户端/服务器应用程序,我一直在一台PC上开发。现在它需要两个串口,所以我从朋友那里借了一台电脑。

当我构建我的应用程序并尝试运行或调试它时(无论是在Delphi IDE中还是从Windows文件管理器中),它出现错误“应用程序无法正确启动(0xc000007b)”。

谷歌搜索并没有带来多少,但似乎表明这不是特定于Delphi的其他应用程序。它似乎是由64位应用程序调用32位DLL引起的,反之亦然。

  • 两台PC都是Windows 7,64位
  • 都有Delphi Xe2入门版,只能处理32位
  • 该应用在我的电脑上运行良好,但不在我朋友的
  • 其他Delphi应用程序在两台PC上运行良好

任何人都可以给我一个关于如何跟踪它的提示吗?

19 个答案:

答案 0 :(得分:125)

首先,我建议使用dependency walker来测试您的应用程序与其依赖项之间是否存在问题

答案 1 :(得分:52)

无法解决加载时间依赖关系。调试此问题的最简单方法是使用Dependency Walker。使用“配置文件”选项可获取加载过程的诊断输出。这将确定故障点,并指导您找到解决方案。

此错误的最常见原因是尝试将64位DLL加载到32位进程中,反之亦然。

答案 2 :(得分:12)

这是一个失踪的dll。 可能,与com端口一起使用的dll具有未解析的dll依赖性。 您可以使用依赖性walker和Windows调试器。例如,检查所有mfc库。此外,您可以使用nrCommlib - 它是使用COM端口的好组件。

答案 3 :(得分:12)

我尝试了这里指定的所有内容,并找到了另一个答案。我不得不用32位DLL编译我的应用程序。我已经构建了32位和64位的库,但我的PATH设置为64位库。在我重新编译我的应用程序之后(我的代码中也进行了一些更改)我遇到了这个可怕的错误并且挣扎了两天。最后,在尝试了许多其他事情之后,我将我的PATH更改为在64位DLL之前拥有32位DLL(它们具有相同的名称)。它奏效了。我只是在这里添加完整性。

答案 4 :(得分:8)

在前面的答案中已经提到过,使用依赖者walker是可行的方法,在我的情况下(我的应用程序一直在使用错误代码失败),依赖者walker显示了一些不相关的dll!

最后发现我可以通过转到“配置文件”菜单运行分析,它将运行应用程序并停在导致问题的确切dll!我发现一个32位的dll是因为路径而被修复的。

enter image description here

答案 5 :(得分:5)

我最近遇到了一个问题,我正在开发一个应用程序(使用串口)并且它在我测试它的所有机器上工作但是有些人遇到了这个错误。

事实证明,发生错误的所有计算机都在运行Win7 x64并且从未更新过。

运行Windows更新修复了我特定情况下的所有计算机。

答案 6 :(得分:4)

我在使用Microsoft Visual Studio 2012开发客户端 - 服务器应用程序时遇到了同样的问题。

如果您使用Visual Studio开发应用程序,则必须确保新的(即未开发该软件的计算机)具有相应的Microsoft Visual C ++ Redistributable Package。适当时,您需要Visual C ++ Redistributable Package的正确的年份和位版本(即32位的x86和64位的x64)。

  

Visual C ++ Redistributable Packages安装运行使用Visual Studio构建的C ++应用程序所需的运行时组件。

以下是Visual C++ Redistributable for Visual Studio 2015 的链接。

您可以转到控制面板 - >来查看安装的版本。程序 - >程序和功能。

以下是我如何得到此错误并修复它:

1)我在计算机上使用Visual Studio 2012开发了一个32位应用程序。 我们打电话给我的电脑ComputerA。

2)我在另一台计算机上安装了.exe和相关文件,我们称之为ComputerB。

3)在ComputerB上,我运行.exe并收到错误消息。

4)在ComputerB上,我查看了程序和功能,但没有看到Visual C ++ 2012 Redistributable(x64)。

5)在ComputerB上,我搜索了Visual C ++ 2012 Redistributable并选择并安装了x64版本。

6)在ComputerB上,我在ComputerB上运行.exe并没有收到错误消息。

答案 7 :(得分:3)

实际上此错误表示图像格式无效。但是,为什么会发生这种情况以及错误代码通常意味着什么?实际上,当您尝试运行为64位Windows操作系统制作或打算使用的程序时,可能会出现这种情况,但您的计算机是在32位操作系统上运行的。

可能的原因:

  • Microsoft Visual C ++
  • 需要重启
  • 的DirectX
  • .NET Framework
  • 需要重新安装
  • 需要以管理员身份运行该应用程序

来源:http://www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/

答案 8 :(得分:2)

这可能是调试调试器可能有用的情况。基本上,如果你遵循instructions here,你可以运行两个ide,一个将调试到另一个。如果您将应用程序放在一个应用程序中,有时可以捕获您错过的错误。值得一试。

答案 9 :(得分:2)

我已经看到尝试在没有安装Visual C ++的计算机上运行VC ++调试可执行文件时出错。构建发布版本并使用它修复它。

答案 10 :(得分:2)

在我的情况下,在构建DLL(使用Visual Studio 2015)后重命名DLL时发生错误,因此它符合依赖于DLL的可执行文件所期望的名称。重命名后,Dependency Walker显示的导出符号列表为空,并显示错误消息“应用程序无法正确启动”。

因此可以通过更改Visual Studio链接器选项中的输出文件名来解决此问题。

答案 11 :(得分:2)

如果您试图向应用程序表明它依赖于 Microsoft.Windows.Common-Controls 程序集,则可以使用此功能。当您要加载通用控件库的版本6时,可以执行此操作-以便将视觉样式应用于通用控件。

您可能从Windows XP时代开始就遵循了Microsoft的原始文档说明,并在应用程序清单中添加了以下内容:

<!-- Dependancy on Common Controls version 6 -->
<dependency>
    <dependentAssembly>
        <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="6595b64144ccf1df"
                language="*"/>
    </dependentAssembly>
</dependency>

Windows XP不再是操作系统,并且您不再是32位应用程序。在随后的17年Microsoft updated their documentation;现在是时候更新清单了:

<!-- Dependancy on Common Controls version 6 -->
<dependency>
    <dependentAssembly>
        <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"/>
    </dependentAssembly>
</dependency>

Raymond Chen在共同控制方面有着悠久的历史:

答案 12 :(得分:1)

还可以将“Dependencies”下载并解压缩到您放置wget.exe的文件夹中

http://gnuwin32.sourceforge.net/packages/wget.htm

然后你会在同一个文件夹中有一些lib * .dll文件和wget.exe,它应该可以正常工作。

(我也在这里回答了https://superuser.com/a/873531/146668我最初找到的。)

答案 13 :(得分:1)

当然,主要问题是DLL文件丢失,甚至更有可能损坏。如果是这种情况,那么我有一些不错的主意(尤其是如果您手动下载并安装了DLL!)...

做什么

这种将丢失的DLL复制/粘贴到system32等中的解决方案曾经很有效,因为我记得1990年代,但是似乎不再起作用(2020年)。因此,如果您最近遇到这个问题,我建议:

  • windows\system32windows\SysWOW64中,删除所有与ms*.dll匹配的文件,操作系统将允许您以admin的身份删除这些文件。
  • 卸载Windows中所有的Visual C ++ Redistributable。这样可以防止“您已经有这个!”重新安装时会显示对话框,如我们重新安装时在下一步中所述。
  • 从常规可用的下载站点重新安装2015-2019 Visual C ++ Redistributable。如果这不起作用,请下载并安装其他版本,但就我个人而言,2015-2019涵盖了所有内容。 (所有下载链接:Collected VC++ Download Links。)

您如何知道其工作原理

遇到这种情况的编码人员有很多不同之处,因此通常会放弃一个单一的可能解决方案的想法,但请肯定地说!

  • 如果删除匹配的ms*.dll文件有效,那么您将不再收到有关error code 0xc000007b的错误。相反,您会收到一条有关缺少.dll的消息。这表明您正在找到正确的代码路径!
  • 如果安装可重新分发的作品,则某些流行的DLL文件应出现在上述system32SysWO64文件夹中。例如:MSVCR120.dllMSVCR140.dllMSVCR100.dllMSVCP100.dllMSVCP120.dllMSVCP140.dll和朋友。

最后可能的机会

有时候事情无法按计划进行(正如Windows世界中的所有人都知道的那样)。您也可以尝试以下方法!

  • 在Windows中打开“打开或关闭Windows功能”选项卡(在Windows 8-10中受支持)。取消选中.NET Framework安装。您会看到一个小的安装过程。
  • 重新启动系统。再次转到上述功能,重新检查.NET Framework,然后单击“确定”。如果可行,您将看到一条“安装和更新.NET Framework”消息,可能需要一分钟左右的时间。完成此操作后,我建议再次重新启动。

祝你好运!

答案 14 :(得分:1)

您的系统上可能有多个版本的dll。您可以搜索系统以进行查找。只需更改路径中目录的顺序即可解决此问题。这是我的问题。 (Cannot run Qt Creator GUI outside of Qt. "The application was unable to start correctly (0xc000007b)" error

答案 15 :(得分:1)

如果由于某种原因从x64计算机加载x86资源,则会发生这种情况。为了明确地避免这种情况,请将此预处理程序指令添加到stdafx.h(当然,在我的示例中,有问题的资源是Windows公共控件DLL。

#if defined(_WIN64)
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df'\"")
#endif

答案 16 :(得分:1)

我刚遇到这个问题。我搜索了&#34; C ++&#34;在我的&#34; Apps&amp;特征&#34;在Windows 10控制面板中,注意到某些更新刚刚运行几天并安装了VC ++ Redistributable 2012-2017。运行到错误消息中的应用程序只需要VC ++ 2010.我卸载了所有这些,然后重新安装了仅仅2010 x86 / x64,错误消失了,应用程序按预期运行。

答案 17 :(得分:1)

刚刚为我的个人项目解决了这个问题(感谢Dries)。对我来说,这是因为项目路径太长了。将.sln保存到较短的路径(C:/ MyProjects)并从那里编译后,它运行时没有错误。

答案 18 :(得分:0)

我在从我的存储库中获取代码并在新机器上编译时遇到了这个问题。复制整个存储库然后编译会产生一个可以工作的可执行文件。结果发现一个 32 位的 DLL 没有被意外签入。正如上面的人所说,使用“Dependency Walker”来找出哪里出错了。

为了更清楚要查找的内容,请参见下面的屏幕截图,在后台 exe 尝试加载错误的 DLL(注意“64”),导致“应用程序无法正确启动 0xc00007b”和前景是简单复制过来的 exe(包括正确的 DLL)。

Dependency Walker