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

相关文章

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景: