构建时由另一个进程锁定的输出文件

时间:2013-01-11 21:42:22

标签: visual-studio-2010 xna kinect

我正在使用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:我可以确认这是我桌面计算机特有的问题。我还没有在笔记本电脑上重现这个问题。

2 个答案:

答案 0 :(得分:7)

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

这取自Jblom1986的帖子。他的解决方案解决了我的问要使用 msconfig.exe 进行更改,请转到服务标签。

  

“当名为'应用程序体验'的Windows服务(当崩溃的某个服务在Microsoft数据库中找到解决方案的服务)被关闭时,另一个名为'搜索索引器'的服务< / strong>(负责通过索引来快速查找驱动器上的文件的服务)开始出现故障。因此,Windows会锁定您移动,复制或使用的所有内容,以便在发布之前对此文件进行“索引”之后你可以删除同一个文件。它用进程ID号4(PID:4)“。

锁定它

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

答案 1 :(得分:0)

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

最有可能的是,您有一个打开并扫描该文件的防病毒或类似进程。