2013-01-11 57 views
2

我正在使用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 I类处置一些纹理的我都用过,我SpriteBatchGraphicsDevice

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

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

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

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

编辑2:为了说明起见,系统过程最终释放文件 - 它不保持锁定状态。我认为这通常需要一到两分钟。

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

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

+0

这可能是一个愚蠢的问题,但程序仍在运行? – Jimmy

+0

这几乎总是由反恶意软件引起的,当它看到一个EXE文件从不知名的地方出现时,它总是会很快退出。特别是当它是知名的麻烦制造者Avast时。先尝试禁用它,看看问题是否消失。 –

+0

@Jimmy,程序没有停止。我通常会测试一些东西,进行更改,然后再次进行调试。我在进行这些更改后重建时遇到此问题。 –

回答

7

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

这是取自Jblom1986的文章。他的解决办法解决了我的问要进行更改,请转至服务选项卡使用msconfig.exe

“当Windows服务命名为的应用体验'(东西崩溃时服务发现在微软数据库的解决方案)被关闭,命名为‘搜索索引’(一个服务的另一个服务,负责通过索引来快速查找驱动器上的文件)开始出现故障,因此,窗口会锁定您已经移动,复制或使用了几分钟的任何内容,以便在释放该文件之前将其“索引”,之后您可以删除它使用进程ID号4(PID:4)“锁定它”。

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

+1

它帮助了我。我已经开始了'AeLookupSvc'服务,并且文件锁定效果已经消失。非常感谢! – SergeyT

0

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

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

+0

我安装了防病毒软件。我刚刚尝试禁用,但我仍然可以复制该问题。如果我等待足够长时间,我就能够成功重建。我有时可以通过重新启动Visual Studio并拔出并插入Kinect设备来加快速度。 –

+0

呵呵 - 听起来像其他进程暂时抓取该文件。您可以尝试禁用其他功能 - 例如防恶意软件或系统索引服务。或者你是否安装了类似Visual Assist的东西?它重新扫描文件。无论如何,一些东西正在打开该文件的句柄。耐心也应该工作 - 不管它是什么,如果有时间,大概会完成并释放那个句柄。 – Mordachai

+1

很多年前,它是索引服务,这是造成我的问题。 – enforge

相关问题