【问题标题】:Output file locked by another process when building构建时被另一个进程锁定的输出文件
【发布时间】:2013-01-11 21:42:22
【问题描述】:

我正在使用 Visual Studio 2010 创建一个带有 Kinect SDK 1.6 的 XNA 应用程序。我有一个问题,即在调试应用程序后构建通常会失败(并非总是)。有一个进程正在锁定KinectDrobePrototype1.exe

Error 12 Unable to copy file "obj\x86\Debug\KinectDrobePrototype1.exe" to 
"bin\x86\Debug\KinectDrobePrototype1.exe". The process cannot access the file
'bin\x86\Debug\KinectDrobePrototype1.exe' because it is being used by another
process.

Error 11 Could not copy "obj\x86\Debug\KinectDrobePrototype1.exe" to
"bin\x86\Debug\KinectDrobePrototype1.exe". Exceeded retry count of 10. Failed.  

我使用了Process Explorer,它告诉我这是System 进程。

Process  |  PID  |  Type  |  Name
System       4      File     C:\Users\ ... \KinectDrobePrototype1\KinectDrobePrototype1\KinectDrobePrototype1\bin\x86\Debug\KinectDrobePrototype1.exe

我看过类似的帖子,例如this,但没有帮助。我觉得我的应用程序中一定有一些东西仍然可以处理一些东西。我确信当应用程序终止时,以下代码会在我的 KinectManager 类中执行。

public void CleanUp()
{
    if (ActiveKinectDevice != null)
        UnintialiseDevice(ActiveKinectDevice);
}

private void UnintialiseDevice(KinectSensor device)
{
    device.Stop();

    device.ColorStream.Disable();
    _ColourPixelData = null;

    device.DepthStream.Disable();
    _DepthPixelData = null;

    device.SkeletonStream.Disable();
    _SkeletonData = null;
}

我对 XNA 很陌生,所以可能有一些我没有做过的事情。在UnloadContent 我有以下内容:

protected override void UnloadContent()
{
    _KinectManager.CleanUp();
    _DrawingManager.CleanUp();           
}

然后在我的DrawingManager 课程中,我处理了我使用过的少数纹理,我的SpriteBatchGraphicsDevice

public void CleanUp()
{
    HandIcon.Dispose();
    JointIcon.Dispose();
    _ColourImage.Dispose();
    _DepthImage.Dispose();

    _SpriteBatch.Dispose();
    _GraphicsDevice.Dispose();           
}

有人有什么建议吗?还是我犯了一个明显的错误?

编辑 1: 我忘了提到我正在使用 Kinect 的轮询方法,这就是为什么我没有取消注册任何事件的原因。

编辑 2: 澄清一下,系统进程最终会释放文件 - 它不会保持锁定状态。我认为这通常需要一到两分钟。

更新 1: 我确实安装了防病毒软件。我已禁用它,但它并没有解决问题。

更新 2: 我可以确认这是我的台式机特有的问题。我还没有在我的笔记本电脑上重现这个问题。

【问题讨论】:

  • 这可能是个愚蠢的问题,但程序还在运行吗?
  • 这几乎总是由反恶意软件引起的,当它看到一个 EXE 文件不知从哪里出现时,它总是非常退出。尤其是当它是著名的麻烦制造者 Avast 时。先尝试禁用它,看看问题是否消失。
  • @Jimmy,程序没有停止。我通常会测试一些东西,进行更改,然后再次进行调试。我在进行这些更改后重建时遇到了这个问题。
  • @Hans 我已经安装了防病毒软件,但我还没有尝试禁用它。
  • 嗯,谢谢你告诉我。盖克。

标签: visual-studio-2010 xna kinect


【解决方案1】:

我在一个论坛上发现了一个标题为“System process "anomaly"”的讨论。

这摘自 Jblom1986 的帖子。他的解决方案解决了我的问题。要进行更改,请使用 msconfig.exe 转到 服务 选项卡。

"当名为 'Application Experience' 的 Windows 服务(当出现崩溃时在 microsoft 数据库中找到解决方案的服务)被关闭时,另一个名为 'Search Indexer' 的服务(负责通过索引文件快速查找驱动器上的文件的服务)开始出现故障。因此,Windows 会锁定您已移动、复制或使用的任何内容几分钟以“索引”此文件,然后再释放之后你可以删除同一个文件。它用进程 ID 号 4 (PID:4) 锁定它。

编辑:这是在 Windows 7 机器上。我不确定其他版本的 Windows 是否有此错误。

【讨论】:

  • 它帮助了我。我已经启动了服务“AeLookupSvc”,文件锁定效果已经消失。非常感谢!
【解决方案2】:

Windows 保证进程将在终止时关闭所有句柄。没有损坏的操作系统,当您的进程退出时,您的句柄无论如何都会关闭。

很可能,您有一个防病毒或类似进程正在打开和扫描该文件。

【讨论】:

  • 我安装了防病毒软件。我刚刚尝试禁用,但我仍然可以复制问题。如果我等待足够长的时间,我就能成功重建。有时我可以通过重新启动 Visual Studio 并拔下并重新插入 Kinect 设备来加快速度。
  • 嗯 - 听起来其他进程正在临时抓取该文件。您可以尝试禁用其他功能 - 例如反恶意软件或系统索引服务。或者您是否安装了 Visual Assist 之类的东西?它重新扫描文件。无论如何,有些东西正在打开该文件的句柄。耐心也应该起作用——不管它是什么,如果给定时间,大概会完成并释放那个手柄。
  • 很多年前,是索引服务导致了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 2011-01-01
  • 2011-01-29
  • 2010-09-05
  • 2013-09-20
  • 1970-01-01
相关资源
最近更新 更多