VS 2005在生成可执行文件时使用了一种新的技术,该技术生成的可执行文件会伴随生成一个清单文件(manifest
file)(.manifest后缀文件)(其本质上是XML文档,你可以用文本编辑器打开看看),并在链接完成后将该清单文件嵌入到exe文件中(默认情况下)。而在FAT32文件系统中,在处理清单文件阶段,当增量链接时不能完成清单文件的更新(默认情况下),于是造成清单文件嵌入失败,从而使该exe文件运行时没有相应的清单文件而运行失败并提示如上错误。

     解决方案很多,列举如下:

1. 由于这是在链接动态运行库出现的问题,所以你可以选择代码生成的连接方式为/MTd而非/MDd,不用这些DLL文件从而避免问题的出现。该方法有一个很显然的缺点:适用范围有限,不推荐该方法。

2. 既然跟FAT32系统有关,那么我们可以选择在NTFS文件系统中开发从而避免该问题,此方法同上,也是采用的回避问题的方式,不提倡。

3. 该方法仍与FAT32有关:在项目的“属性|配置属性|清单工具|常规”中的“使用FAT32解决办法”选择“是”(默认为“否”),重新生成项目即可解决问题。该方法是唯一真正针对问题所在而提出的解决方法,使清单工具可以正确更新。(此方法是官方解决方法,也比较方便,推荐)

4. 既然问题是在更新嵌入的清单文件时发生的,由于FAT32的原因而未能更新嵌入的清单文件,于是我们有如下两种解决方法:

)不启用增量链接。在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此方法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更新清单文件

(2)不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而在生成exe文件时附随生成一个清单文件(默认情况下,其文件名为exe文件的全名加上“.manifest”),避免了嵌入清单文件可能失败的问题。在程序运行时,会用到该清单文件。显然,这种方式使可执行程序产生了更多的外部依赖,不推荐。

另外,还有一个不能称为方法的土办法:每次Build前手动删除*.ilk文件(增量链接文件)(当然可以在项目属性中写入删除命令,使其自动执行),不推荐该土办法。

最后,总结一下:

1. 此问题只在特定条件下才会出现:在FAT32文件系统中编译、默认设置(增量模式、不启用FAT32解决方案、嵌入清单文件)、非第一次生成可执行文件文件(即在增量连接、更新清单文件时)。

和4.1方便实用,推荐使用。

版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

VS2012中出现“无法启动程序...debug\abc.exe,系统找不到指定文件”的问题!的更多相关文章

  1. 运行vs2010,Debug时发生“无法启动程序"http://localhost:xxx",系统找不到指定文件

    网上参考回答:应该是Visual Studio不能启动浏览器导致的结果!第一种结果是没有设置默认的浏览器,第二种情况是注册表被修改了! 我的尝试: 1.在启动处点击下三角,选择“使用以下浏览器浏览” ...

  2. 无法启动"D\projects\hello\Debug\hello.exe" 系统找不到指定的文件。[LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏]

    这两天安装Visual Studio遇到这样的一个问题,用自己的电脑和公司的电脑都出现同样的问题.两台电脑都是新系统,按理来说是没有问题的.但是一出现问题,对于我这个小白来说,还是耗费了挺多精力都无果 ...

  3. vs 2013 Express 无法启动程序xxx.exe,系统找不到指定文件

    由于实验室有人用了含病毒的软件,网管把实验室出口给封了,周末人家又不上班.看样子树莓派是玩不成了,所以昨天在宿舍写windows程序,最基本的窗口程序,听说这段代码初学者至少要自己敲5遍以上.代码如下 ...

  4. mysql 启动提示:错误2系统找不到指定文件

    详情见这个方法 其实就是更改了启动目录导致的 https://blog.csdn.net/su749520/article/details/78963878

  5. C++错误——”无法启动程序”…\xxx.exe” 系统找不到指定的文件”

    背景 在VS2010环境下,升级了一个用C++编写的程序,编译生成成功,但是,不能在VS中直接运行(可以通过打开debug文件目录的exe应用程序运行),提示以下错误:”无法启动程序”…\xxx.ex ...

  6. VS调试提示“无法启动程序,“...exe”。系统找不到指定文件

    当VS调试提示上图所示的警告时,常用的方法是检查“项目”-“属性”-“配置属性”-“常规”-“输出目录”里的路径 项目”-“属性”-“配置属性”-“链接器”-“常规”-“输出文件”里的路径,是否一致, ...

  7. Android 使用AS编译出错:找不到xx/desugar/debug/66.jar (系统找不到指定的文件。)

    以为是合作人配置文件的问题,后发现是缓存的问题,只需要Clean project,即可. 若提示无法删除目录:Unable to delete directory,或许是因为你打开了另一个项目,只需关 ...

  8. win10中docker使用docker-compose启动报错:pywintypes.error: (2, 'CreateFile', '系统找不到指定的文件。')

    Traceback (most recent call last): File "docker\api\client.py", line 214, in _retrieve_ser ...

  9. 黄聪:Windows 64位系统中安装Android SDK“系统找不到指定的文件Java.exe”解决方法

    明明已经在64位window7中安装好了64位版本的jdk,为什么android SDK安装程序却识别不到jdk呢?先看看报错: Java SE Development Kit (JDK) not f ...

随机推荐

  1. XMPP系列(三)---获取好友列表、添加好友

    1.心跳检测.掉线重连功能 客户端和服务器端都可以设置多久发送一次心跳包,如果对方没有返回正确的pong信息,则会断开连接,而添加掉线重连功能,则会自动进行连接. 如果自己写聊天功能还得自己做心跳检测 ...

  2. Effective STL 为包含指针的关联容器指定比较类型

    // 为包含指针的关联容器指定比较类型.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <set> #incl ...

  3. 初探linux子系统集之led子系统(三)

    世界杯结束了,德国战车夺得了大力神杯,阿根廷最终还是失败了.也许3年,5年,或者10年后,人们就不知道巴西世界杯的亚军是谁,但是总是会记得冠军是谁.就像什么考试,比赛,第一永远会被人们所记住,所以我们 ...

  4. JavaScript设计模式之一Interface接口

    如何用面向对象的思想来写JavaScript,对于初学者应该是比较难的,我们经常用的JQuery其实也是用面向对象的思想去封装的,今天我们来看看如何在Javascript中用Interface,在C# ...

  5. Mysql安装和登录相关操作

    一.mysql的下载和安装 1.下载链接地址 http://dev.mysql.com/downloads/mysql/ 安装如下操作进行下载. 2.mysql数据库安装(Windows环境) 1.解 ...

  6. Day5_递归_二分法

    递归调用: 在调用一个函数的过程中,直接或间接的调用函数本身. def func(): print('from func') 间接调用: def foo(): print('form foo') ba ...

  7. 关于在IJ中使用maven projects 的Lifecycle中打包package报expected START_TAG or END_TAG not TEXT

    报错指定到maven本地仓库下的settings.xml某一行,如下列JDK配置: <profiles> <profile>    <id>jdk-1.8</ ...

  8. Java并发编程——BlockingQueue

    简介 BlockingQueue很好的解决了多线程中,如何高效安全"传输"数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利. 阻塞队列是 ...

  9. Flipping Parentheses~Gym 100803G

    Description A string consisting only of parentheses '(' and ')' is called balanced if it is one of t ...

  10. python3学习笔记2---引用http://python3-cookbook.readthedocs.io/zh_CN/latest/2

    2018-03-01数据结构和算法(2) 1.6字典中的键映射多个值 一个字典就是一个键对应一个单值的映射.如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中, 比如列表或者集合里面. ...