应用程序无法正确启动(0xc000007b)
我有一个客户端/服务器应用程序,我一直在一台PC上开发。 现在需要两个串口,所以我向朋友借了一台电脑。
当我构建我的应用程序并尝试运行或调试它时(无论是在Delphi IDE还是从Windows文件管理器中),它都会出现错误“应用程序无法正确启动(0xc000007b)”。
谷歌搜索没有带来太多,但似乎表明,这是没有特定的德尔福和其他应用程序发生。 这似乎是由从64位应用程序调用32位DLL引起的,反之亦然。
- 两台电脑都是Windows 7,64位
- 都有Delphi Xe2入门版,只能处理32位
- 该应用程序在我的电脑上运行良好,但不是在我的朋友的
- 其他的Delphi应用程序在两台PC上都运行良好
任何人都可以给我一个提示如何跟踪这个?
首先,我会建议测试你的应用程序和它的依赖关系之间是否存在使用依赖关系的问题
加载时间相关性无法解析。 调试这个最简单的方法是使用Dependency Walker 。 使用Profile选项可以获得加载过程的诊断输出。 这将确定失败点,并应指导您解决问题。
此错误最常见的原因是尝试将64位DLL加载到32位进程中,反之亦然。
这是一个缺少的DLL。 也许,你的DLL与COM端口的工作有一个未解决的DLL依赖。 你可以使用依赖walker和windows调试器。 例如,检查所有的mfc库。 此外,你可以使用nrCommlib – 这是使用COM端口的好的组件。
我尝试了这里指定的所有东西,并找到了另一个答案。 我不得不用32位DLL编译我的应用程序。 我已经建立了32位和64位的库,但我的PATH
设置为64位库。 在我重新编译我的应用程序(在我的代码中进行了一些更改)之后,我得到了这个可怕的错误,并且挣扎了两天。 最后,在尝试了许多其他的事情之后,我改变了我的PATH
在64位DLL(它们具有相同的名称)之前有32位的DLL。 它的工作。 我只是在这里添加它的完整性。
我最近有一个问题,我正在开发一个应用程序(使用串行端口),它在我测试过的所有机器上都能正常工作,但是有一些人却遇到了这个错误。
事实证明,所有发生错误的机器都运行Win7 x64,并且从来没有更新过。
运行Windows更新修复了我的特殊情况下的所有机器。
在早些时候的答案中已经提到,使用依赖关系walker是要走的路,在我的情况下(我的应用程序保持与错误代码失败),依赖walker显示一些dll是不相关的!
最后发现我可以通过“profile”菜单运行配置文件,它将运行应用程序并停止在导致问题的确切dll中! 我发现一个32位的DLL是由于路径选择,并修复它。
其实这个错误表明一个无效的图像格式。 但是,为什么会发生这种情况,错误代码通常意味着什么呢? 实际上,当您尝试运行一个为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/
我遇到了使用Microsoft Visual Studio 2012开发客户端 – 服务器应用程序的相同问题。
如果您使用Visual Studio开发应用程序,则必须确保新的(即未开发软件的计算机)具有适当的Microsoft Visual C ++可再发行组件包。 通过适当的方式,您需要Visual C ++ Redistributable Package的正确的年份和位版本(即x86为32位,64位为x64)。
Visual C ++可再发行组件包会安装运行使用Visual Studio构建的C ++应用程序所需的运行时组件。
这里是Visual Studio 2015的Visual C ++可再发行组件的链接。
您可以通过控制面板 – >程序 – >程序和功能来检查安装的版本。
这是我得到这个错误,并修复它:
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,并没有收到错误信息。
这可能是调试调试器可能有用的情况。 本质上,如果你按照这里的说明,你可以运行两个IDE,一个将调试到另一个。 如果你把应用程序放在一个,你有时会发现你错过的错误。 它值得一试。
我看到了错误,试图在没有安装Visual C ++的机器上运行VC ++调试可执行文件。 建立一个发行版本并使用它来修复它。
在我的情况下,当我在构建它之后重命名DLL(使用Visual Studio 2015)时发生错误,以便它符合由可执行文件预期的名称,该名称取决于DLL。 重命名后,Dependency Walker显示的导出符号列表为空,并显示错误信息“应用程序无法正确启动”。
所以可以通过更改Visual Studio链接器选项中的输出文件名来修复。
刚刚解决了这个问题,我的个人项目(感谢Dries的那个)。 对我来说是因为项目路线太长了。 将.sln保存到较短路径(C:/ MyProjects)并从那里编译后,运行时不会出现错误。
同时下载并解压“Dependencies”到你放置wget.exe的文件夹中
http://gnuwin32.sourceforge.net/packages/wget.htm
然后,您将有一些lib * .dll文件以及wget.exe在同一文件夹中,它应该工作正常。
我刚刚遇到这个问题。 我在Windows 10控制面板的“应用程序和功能”下搜索了“C ++”,注意到某种更新刚刚运行了几天,并安装了VC ++ Redistributable 2012-2017。 运行到错误消息的应用程序只需要VC ++ 2010.我卸载了所有这些,然后重新安装了2010 x86 / x64,错误消失,应用程序按预期运行。
如果由于某种原因从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