VisualStudio2005编译的版本无法启动,出现应用程序配置不正确的错误

2026-05-09
在网上找出了这些方法:
  方法一:
  在类似C:\Program Files\Microsoft Visual Studio 8\VC\redi
  st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:
  msvcm80d.dll
  msvcp80d.dll
  msvcr80d.dll
  Microsoft.VC80.DebugCRT.manifest
  把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。
  其他release版、MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!
  方法二:
  修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。
  方法三:
  工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”
  这样生成的exe文件应该就可以在其他机器上跑了。
  方法四:
  你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装
  在大部分机上都可以运行了,唯独在我的测试机上还是报应用程序配置错误。刚开始怀疑是还缺少dll,在能跑的机上把windows/system32目录下所有的msvc*.dll都复制到这台机的运行目录,还是不行!极度郁闷※×…!后来实在没辙了,就在VC环境中打开了EXE来查看它内嵌的manifest资源,无奈了看了一会,带着心中对manifest的咒骂,突然发现这个manifest带了两个版本CRT的依赖:
      再打开Microsoft.VC80.CRT.manifest一看,是这样:
    就是说,我们EXE的Manifest里多了一个版本依赖,那就把后面那个依赖删除试试。于是就把工程设置的生成manifest的选项去掉,手工改了一下manifest放到程序目录下,发现果然可以运行了!
  还有个问题没有明白,就是VC为什么在自傻膍anifest里带了两个依赖呢,上网再查了一下,发现在msdnonline上说'8.0.50608.0'这个版本是在XP下用的,'8.0.50727.762'这个版本是在Vista下用的(http://msdn.microsoft.com/en-us/library/ms235342(VS.80).aspx),可是我用的是'8.0.50727.762'在XP下运行的好好的!想不通是它错了还是别的原因。后来在CRT的源码里面搜索'8.0.50727.762',找到了~'8.0.50608.0'也在那里。
  #if defined _USE_RTM_VERSION
  #define _CRT_ASSEMBLY_VERSION “8.0.50608.0”
  #else
  #define _CRT_ASSEMBLY_VERSION “8.0.50727.762”
  #endif
  显然默认的版本是“8.0.50727.762”,除非定义了_USE_RTM_VERSION!那为什么我们的工程会生成两个版本的依赖呢,明明这个地方是二选一的。一开始怀疑是工程设置引起的,我就把我们的工程拷出来,把里面的文件删掉,再复制一些向导生成的文件进来,编译一看,manifest里只有一个'8.0.50727.762',说明工程设置没有问题!最后我怀疑是工程链接的那些库的问题,因为有些库是用VC6或者VC2003编译的,但是有些库没有代码,编不了,没法尝试了。