终于解决了一个Win7 下 VS 编译的问题,困扰了我好几个月

简介:

用 Win7 一年多了,一直在这个环境下编程,其他都挺好,就是有个问题非常恶心,在VS下编译经常出现进程正在使用,无法覆盖的错误,这个问题我记得博问中以前也有其他人遇到过,也没有解决掉。此问题困扰了我一年,期间我查了很多中英文资料都没有得到理想的答案。今天实在忍无可忍,又去狗了一下,可能关键字输入不一样吧,这次终于狗出来了,困扰一年的问题终于解决了。写此文希望能帮助和我一样正在为此问题抓狂的同仁。

      这个问题其实并不是VS的问题,只是因为我用VS需要经常编译并生成exe文件,所以才会表现的比较突出。它本质上其实是操作系统本身的问题,其表现为如果你运行了一个exe文件,当关闭这个进程后,你删除它,在资源管理器中你会看到它被删除了,但一刷新它又出现了,要等待大约5分钟左右,这个文件才会实际被删除掉,在此期间你无法对这个文件覆盖或改名。体现在VS开发环境中就是一旦你编译完运行过一次这个程序,你后面再编译,就报进程正在使用,无法覆盖,要等5分钟后才好。这个等待的时间时长时短,故障也不是每次都出现,不同的exe文件出现的频率也不一样。

       我之前在google 和 百度中搜索过很多次,中文和英文论坛中都有很多人遇到这个问题,基本上回答者给出的解决方案有以下几种:

       1. 第三方杀毒软件在作怪

       这个是最容易联想到的,在MSDN 的英文论坛上,我看到一个来自微软的工程师就是这么回答的,他坚决否认是操作系统引起的。由于他代表微软回答问题,这个很有一些误导性。实际上我停用了我的杀毒软件,还是无法解决这个问题,论坛上遇到相同问题的人也是一样。

       2. Indexing service 引起

       这种说法也是想当然的,认为Indexing service 在后台工作,可能会访问这个文件,导致无法删除。但这个说法有个问题他无法解释,就是为什么只有exe文件才出现这个问题?不管怎么样,我禁用了 Indexing service 这个服务,结果依然无法解决这个问题。

       3. 权限不够造成

       这个说法也比较荒谬,权限不够那应该永远无法删除才对,而且出错信息不应该是进程正在使用。我给了所在目录最高权限,依然无法解决这个问题。

 

      为了证实这个问题到底是操作系统的问题还是应用程序的问题,我尝试了下面方法

      1. 用 ProcessExplorer 来看对应的exe 文件有没有进程在占用

      结果是没有进程在占用。

      2. 将 exe 文件所在的目录做了审核,看删除后到底谁又把它重新创建了,因为删除后从表象上看,刷新一下,进程又出来了,所以我怀疑有什么进程重新创建了这个exe文件。

      结果当删除后,审核的日志中报告删除成功,之后没有重建的日志,而此时资源管理器中仍然能看到这个文件,而且无法覆盖和改名。

     

      由此我基本判断这个问题是操作系统引起的,和其他应用程序占用无关,exe 被删除后,操作系统中出现了不一致。很长一段时间我一直没有找到解决方案,因此我对win7 操作系统抱有成见,因为这个问题实在是个很严重的问题,这么多人都遇到过,居然都没有去fix 这个bug。不过今天我终于找到了解决方案,看来不是bug,而是使用不当造成,至于为什么会出现这个问题,我还没有搞清楚。

      问题的原因是 Application Experience 这个服务被关闭造成的,其实还有一个服务叫Program Compatibility Assistant Service 也要运行,只有这个两个服务同时运行,才不会出现这个删除不掉exe 的问题。

相关文章
|
数据库 C++
VS 错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
VS 错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
1503 0
VS 错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
|
3月前
|
存储 分布式计算 运维
迅雷基于阿里云 EMR Serverless Spark 实现数仓资源效率与业务提升
迅雷基于阿里云 EMR Serverless Spark 实现数仓资源效率与业务提升,在迁移到 EMR Serverless Spark 之后,TCO 明显下降,平台按作业生命周期弹性拉起与回收,只为实际消耗付费;同时,托管化带来了稳定性与调度效率提升;更关键的是交付确定性提升,大作业整体可提速约 1 小时,报表链路从长尾波动变成更可控的出数节奏。
|
8月前
|
存储
参数不是越多越好?聊聊模型规模与智能能力的那些“门道”
参数不是越多越好?聊聊模型规模与智能能力的那些“门道”
677 2
|
C语言
【C语言】break 关键字详解
- `break` 关键字用于提前退出循环体或 `switch` 语句的执行。 - 在 `for`、`while` 和 `do-while` 循环中,`break` 可以帮助程序在满足特定条件时退出循环。 - 在 `switch` 语句中,`break` 用于终止 `case` 代码块的执行,避免代码“穿透”到下一个 `case`。 - 注意 `break` 只会退出最内层的循环或 `switch` 语句,确保在嵌套结构中正确使用 `break` 以避免意外的控制流行为。
1632 2
|
网络协议
TCP/IP与OPC协议的深度比较
总的来说,TCP/IP和OPC协议各有其优点和应用场景。TCP/IP协议是网络通信的基础,而OPC协议则是工业自动化领域的重要工具。在实际应用中,我们需要根据具体的需求和场景,选择合适的协议。
528 11
|
Java 数据库连接 mybatis
MapStruct-Java实体转换利器
本文介绍了MapStruct这一Java实体转换工具,通过定义mapper接口和使用注解,自动生成实现类以简化不同Java对象之间的转换过程,并提供了一个简单的使用示例,包括定义DTO、Entity类和映射接口,以及在Service层中的使用方式。
MapStruct-Java实体转换利器
|
Kubernetes 云计算 Docker
【K8S系列】深入解析 k8s:入门指南(一)
【K8S系列】深入解析 k8s:入门指南(一)
1016 0
|
敏捷开发 数据可视化 算法
瀑布模型大揭秘:如何用分段式开发轻松搞定软件项目?
瀑布模型是软件开发中最早的线性开发方法,由Winston W. Royce于1970年提出。该模型将项目分为需求分析、系统设计、实现、集成与测试、部署和维护六个阶段,每个阶段自上而下依次进行。尽管近年来敏捷开发备受推崇,但瀑布模型在需求明确、流程复杂的项目中仍具重要价值。本文将详细介绍瀑布模型的概念、主要阶段及步骤,并探讨如何使用项目管理工具如板栗看板,帮助团队高效协作。
709 0
|
编解码 前端开发 JavaScript
纯前端也能实现视频转GIF
纯前端也能实现视频转GIF
|
存储 XML JSON
MISP - 恶意软件信息共享平台和威胁共享
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396464 参考:https://github.com/MISP/MISP MISP,恶意软件信息共享平台和威胁共享是一个开源软件解决方案,用于收集,存储,分发和共享网络安全指标,并对网络安全事件分析和恶意软件分析构成威胁。
3889 0

热门文章

最新文章