visual studio 2005 ( vs2005 , vc2005 ) 编译的应用程序无法运行的解决方案

本文主要是介绍visual studio 2005 ( vs2005 , vc2005 ) 编译的应用程序无法运行的解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    有些早期的visual studio 2005 C++工程,用vc2005编译debug配置一切正常,运行时却提示:

    无法启动程序

    由于应用程序配置不正确,未能启动此应用程序。请查看清单文件以查找可能的错误。重新安装该应用程序可能修复此问题。有关更多详细信息,请参见应用程序事件日志。

   查看事件日志,出错日志记录里有如下信息:

   找不到附属汇编 Microsoft.VC80.DebugCRT,上一个错误是 参照的汇编没有安装在系统上。
Resolve Partial Assembly 为 Microsoft.VC80.DebugCRT 失败。 参考错误消息: 参照的汇编没有安装在系统上。

     VS2005编译出来的应用程序,会附带一个 .manifest (清单文件),里面会记录应用程序运行所依赖的 VS2005运行库的准确版本。 如果应用程序链接时使用了其他人编译好的库,由于这些直接使用的库依赖的是其编译环境的VS2005运行库的准确版本, 和当前安装的VS2005的版本可能不符,尤其是依赖更新的版本, 而当前安装的VS2005版本比较旧时,就会出现上述问题。

    主要是 Microsoft.VC80.DebugCRT 、Microsoft.VC80.DebugMFC 的依赖版本容易和本机版本不符。网上的通常解决方案是,尝试安装不同版本的VS2005 ( VC2005 ) 运行库,这个方法对于release配置编译出来的应用程序运行问题,是个好的解决方案。 但是对于debug配置编译出来的应用程序运行问题无效。因为网上下载到的不同版本的VS2005 ( VC2005 ) 运行库,包含的是Microsoft.VC80.CRT 、Microsoft.VC80.MFC 运行库,不是Microsoft.VC80.DebugCRT 、Microsoft.VC80.DebugMFC 库。

     对于这个问题,可以用如下方法解决:

     1、修改编译配置:“ 项目 -> 属性 ->配置属性 -> 清单工具 -> 输入和输出 -> 嵌入清单 ” 为“否”。

     2、重新编译项目,会生成目标应用程序名同名,但多一个“ .manifest” 后缀的清单文件,在VS里面打开这个manifest文件, 检查其中的 version 信息, 比如:

    name="Microsoft.VC80.DebugCRT" version="8.0.50727.6195"

    name="Microsoft.VC80.DebugMFC" version="8.0.50727.6195" 

   3、检查VS2005版本:帮助 -> 关于 菜单里有版本信息,比如:8.0.50727.42。然后将上一步manifest文件中版本数字大于此版本数字的,都修改为当前版本数字, 比如:将 8.0.50727.6195  修改为 8.0.50727.42。 

   然后运行,通常就可以运行起来了。如果不行,可以将本机 VS2005版本更新为尽可能新的版本再重新尝试。

注意:上述方法 修改的.manifest 文件要复制一份,保存在不同的目录,因为后续编译会重新生成.manifest 文件, 这时可以用复制的那份来覆盖新生成的 .manifest 文件。( 这个操作也可以自动化: 

       修改VS2005项目配置:“ 项目 -> 属性 ->配置属性 -> 生成事件 -> 生成后事件  ”, 

       在命令行,用copy命令实现 manifest 文件的覆盖操作, 比如:

           copy /Y  xxx.exe.manifest  debug

       上面命令中xxx表示应用程序名,备份的manifest文件在当前目录,生成的应用程序在debug目录。 )

   附加说明:

   对于网上下载的早期程序,运行出现上述同类错误提示,也可以通过修改manifest文件的方法解决,不过期manifest文件通常内置在程序内部,可以通过使用工具 ResourceHacker (ResHacker ) 打开应用程序,检查其manifest中的版本信息,再进入本机C:\Windows\WinSxS下查看本机已安装的运行库版本,将应用程序的manifest里的版本信息修改为本机对应版本,然后保存。应用程序即可正确运行。

这篇关于visual studio 2005 ( vs2005 , vc2005 ) 编译的应用程序无法运行的解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124516

相关文章

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

kkFileView在线预览office的常见问题以及解决方案

《kkFileView在线预览office的常见问题以及解决方案》kkFileView在线预览Office常见问题包括base64编码配置、Office组件安装、乱码处理及水印添加,解决方案涉及版本适... 目录kkFileView在线预览office的常见问题1.base642.提示找不到OFFICE组件

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

Spring Security常见问题及解决方案

《SpringSecurity常见问题及解决方案》SpringSecurity是Spring生态的安全框架,提供认证、授权及攻击防护,支持JWT、OAuth2集成,适用于保护Spring应用,需配置... 目录Spring Security 简介Spring Security 核心概念1. ​Securit