当前位置: 首页 > news >正文

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里的版本信息修改为本机对应版本,然后保存。应用程序即可正确运行。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 与PC1显著相关的基因 | p值计算
  • 个人旅游网(1)——数据库表详解
  • JVM1-初识JVM
  • 【cocos creator】养成游戏简易事件系统,每日随机事件,每日行动点重置,根据数据检测多结局
  • 【Unity输入】Input Manager 和 Input System对比
  • 实训第三十二天(学习playbook-roles,脚本创建数据库和表,mycat读写分离)
  • 2024年程序员金九银十面试宝典持续更新中.....
  • 【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS
  • 命令模式与宏命令:批量操作的高效实现
  • 探索Edge-TTS与WebSocket集成:打造实时语音交互系统
  • 【网络编程通关之路】 Tcp 基础回显服务器(Java实现)及保姆式知识原理详解 ! ! !
  • addroutes和next()导致的页面无法跳转问题,如登录之后无法跳转到首页,无法重定向,使用next(to)
  • 树、二叉树
  • 42-java 为什么要有包装类
  • 设置 Nginx、MySQL 日志轮询
  • es6要点
  • HTML5新特性总结
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java2019面试题北京
  • k个最大的数及变种小结
  • Otto开发初探——微服务依赖管理新利器
  • React中的“虫洞”——Context
  • V4L2视频输入框架概述
  • 第十八天-企业应用架构模式-基本模式
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 深度解析利用ES6进行Promise封装总结
  • 推荐一个React的管理后台框架
  • 学习HTTP相关知识笔记
  • 组复制官方翻译九、Group Replication Technical Details
  • ​如何在iOS手机上查看应用日志
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (独孤九剑)--文件系统
  • (分布式缓存)Redis分片集群
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (算法)大数的进制转换
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转)h264中avc和flv数据的解析
  • (转)http-server应用
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • ***利用Ms05002溢出找“肉鸡
  • *Django中的Ajax 纯js的书写样式1
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .gitattributes 文件
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET/C# 使窗口永不获得焦点
  • .NetCore发布到IIS
  • .net程序集学习心得
  • .net打印*三角形