重新编译时无法删除exe

时间:2014-10-06 20:54:46

标签: c++ windows

我知道这已经被问了很多但是在大多数情况下答案都不是很令人满意/工作,所以我会尝试再给它一次:

在我的C ++项目中,由Eclipse CDT使用MinGW和GCC构建,我有以下构建前和构建后步骤:

  • pre:从中心“dist”文件夹中删除myapp.exe(如果旧版本位于其中)
  • build:编译myapp.exe
  • post:将已编译的myapp.exe从配置文件夹移动到中心“dist”

到目前为止一切顺利,但问题在于:

当我快速重新编译应用程序时,删除和移动/覆盖步骤(前置和后置)失败并显示“权限被拒绝”消息。但是,一段时间后文件就消失了,所以我假设有一些删除命令在后台等待,直到授予权限为止。

这非常烦人,特别是因为我不能只做出改变,重新编译和测试。

我到目前为止找到的答案主要包括以下内容:

  • 应用程序可能仍在运行
    - >编译后我从未启动它,所以我猜它没有运行
  • 其他一些应用程序可能会保存文件句柄 - > ProcessExplorer找不到myapp.exe的任何打开文件句柄(虽然可能有一个,但我怎么找到它?)
  • 某些防病毒软件可能正在检查新文件
    - >我特意将“dist”文件夹放在被忽略的pathI
  • 权限可能会丢失 - >我是以管理员身份尝试此操作,因此用户权限不应成为问题

关于我可以检查哪些其他内容的任何想法?

顺便说一句,我在Win7机器上这样做,以防它确实重要。

更新

我尝试编译应用程序两次然后尝试删除命令行上的exe。 消息:权限被拒绝。

这是Process Monitor输出(命令为D:\Development\dist>del myapp.exe):

23:46:16,6973545    cmd.exe 3716    QueryOpen   D:\Development\dist\myapp.exe   DELETE PENDING  
23:46:16,6974731    cmd.exe 3716    QueryOpen   D:\Development\dist\myapp.exe   DELETE PENDING  
23:46:16,6975989    cmd.exe 3716    CreateFile  D:\Development\dist SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
23:46:16,6976533    cmd.exe 3716    QueryDirectory  D:\Development\dist\myapp.exe   SUCCESS Filter: myapp.exe, 1: myapp.exe
23:46:16,6977718    cmd.exe 3716    CreateFile  D:\Development\dist\myapp.exe   DELETE PENDING  Desired Access: Read Attributes, Delete, Disposition: Open, Options: Non-Directory File, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
23:46:16,6978960    cmd.exe 3716    CreateFile  D:\Development\dist\myapp.exe   DELETE PENDING  Desired Access: Read Attributes, Delete, Disposition: Open, Options: Non-Directory File, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
23:46:16,7655834    cmd.exe 3716    QueryDirectory  D:\Development\dist NO MORE FILES   
23:46:16,7656301    cmd.exe 3716    CloseFile   D:\Development\dist SUCCESS 

因此,似乎文件被阻止,因为删除处于待处理状态。我明天会检查预构建命令。

0 个答案:

没有答案