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

问题描述 投票:147回答:17

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

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

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

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

任何人都可以给我一个提示,如何跟踪这个?

windows delphi 64bit
17个回答
128
投票

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


2
投票

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


2
投票

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

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


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有着共同控制的可爱历史:


1
投票

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


1
投票

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

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

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

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


1
投票

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


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

1
投票

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


52
投票

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

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


12
投票

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


12
投票

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


8
投票

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

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

enter image description here


5
投票

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

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

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


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)在计算机上,IN运行.exe并获取错误消息。

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

5)在计算机上,在谷歌中进行Visual C ++ 2012 Redistributable并选择并安装x64版本。

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


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/


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.