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

相关推荐
SunkingYang10 个月前
VC++、MFC中操作excel时,Range.Cells和Worksheet.Cells的区别是什么?
c++·excel·mfc·vc++·range·cells·worksheet
SunkingYang10 个月前
如何在VS2022上的MFC项目中操作Excel(VS2010、VS2012、VS2015、VS2017、VS2019使用方法一样)
excel·mfc·vc++·vs2022·vs2015·excel读写·excel操作
SunkingYang10 个月前
MFC、VC++操作excel后,excel程序进程无法正常退出的非暴力处理方法
excel·mfc·vc++·进程无法退出·进程残留·再次调用报错·资源释放
SunkingYang10 个月前
如何在vs2017及以前版本(vs2010、vs2015)上添加 添加类型库中的MFC类
vc++·from typelib·activex control·odbc consumer·类型库中的mfc类·activex控件中的mfc类·mfc odbc 使用者
专注VB编程开发20年10 个月前
为何百兆静态库能打进数兆的可执行文件?
动态库·静态库·dll·vc++·静态编绎
itgather10 个月前
Windows7+vs2005源码安装subversion
c++·libsvn·windows7·vs2005
llc的足迹1 年前
Win11中使用pip或者Cython报错 —— error: Microsoft Visual C++ 14.0 is required.
pip·vc++