0xc000007b“应用程序无法正确启动”错误?

问题描述 投票:0回答:1

我已经在Visual Studio 2019中编写了一个C ++控制台应用程序,并试图将其部署到另一台Windows笔记本电脑上。两台笔记本电脑都是最新的64位Windows 10,并且我的目标笔记本电脑已安装/最新的.NET Framework,vc_redist.x64.exe和DirectX。

[在部署方法方面,我逐字跟着this Microsoft walkthrough,并增加了确保我新创建的“安装”项目也针对x64平台的步骤,因为我代码中的某些外部库需要x64。结果“安装程序” .exe / .msi对在源便携式计算机上按计划工作-无需额外的安装即可运行。

在目标笔记本电脑上安装正常,但是启动该程序会给出本文标题中提到的错误。经过几个小时的尝试,我想我已经知道问题的根源了,但首先,我将分享我尝试过的内容,这基本上是通过谷歌搜索找到的所有建议错误代码:

  • 干净启动
  • SFC扫描
  • chkdsk c:/ f / r
  • 修复/全新安装第一段中提到的所有框架
  • 以管理员身份运行应用程序安装程序和已安装的应用程序
  • 在所有这些更改之后重新启动笔记本电脑并重新安装应用程序

我认为是问题的根源:

在VS中的安装/部署项目中,三个“检测到的依赖项”(MSVCP140D.dll,ucrtbased.dll,VCRUNTIME140D.dll)具有通过…\ System32 \的文件路径,而不是在…\中找到的相同依赖项。 SysWOW64。检测到的其他两个依赖关系是外部64位DLL(这就是为什么我将整个项目都指定为x64的原因)。当我通过Dependency Walker运行应用程序时,它同意前面提到的三个依赖关系是“错误的CPU类型”,而后面两个依赖关系很好。但是,这种情况不能向我解释为什么在源便携式计算机上安装/运行(在VS之外)可以正常工作(如果VS打包了32位和64位依赖关系的混合,那不行吗? 。实际上,通过源便携式计算机上的Dependency Walker运行该应用程序可以发现与目标便携式计算机上完全相同的事物-相同的3个依赖项是“错误的CPU类型”,但是该应用程序在此处运行。

我看不到VS中的选项来更改“设置”项目以读取64位文件路径。我曾尝试过在各个阶段手动交换64位DLL(包括在DLL交换和应用程序运行之间重新启动计算机),但这似乎没有任何效果。实际上,我尝试用SysWOW64文件夹中的DLL替换System32文件夹中的3个相关DLL(我的廉价解决方法是无法更改文件路径的想法-只需更改文件),这只是导致我得到了源笔记本电脑上出现的错误与目标笔记本电脑上出现的错误相同。

所有这些东西对我来说都是相对较新的,所以请让我知道我是否愚蠢地忽略了我的流程/项目的一些基本细节-如果是这样的话,这很好,而且很容易解决。

c++ visual-studio dll deployment frameworks
1个回答
0
投票

在我注意到上面的评论已经回答之前写了这个。只是留在里面。

Debug Binary:看来您已经部署了二进制的调试版本(文件名D中的MSVCP140D.dll)。尝试在发布模式中进行编译并部署新的二进制文件。

原因:调试二进制文件通常需要VCRedist二进制文件的调试版本才能存在于您尝试运行二进制文件的盒子上-它们仅在具有以下功能的开发人员PC上可用安装的SDK(和/或Visual Studio)。该错误信息:[0xc000007b表示"STATUS_INVALID_IMAGE_FORMAT"


TipsThere are some resource links here and some tips on how to debug deployment problems

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