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

我看过类似的帖子,没有帮助。我觉得我的应用程序中一定有一些东西仍然可以处理一些东西。我确定当应用程序终止时,以下代码会在我的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:我可以确认这是我的台式机特有的问题。我还没有在我的笔记本电脑上重现这个问题。

4

2 回答 2

8

我在一个论坛上发现了一个标题为'系统进程“异常” '的讨论。

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

“当名为“应用程序体验”的 Windows 服务(当出现崩溃时在微软数据库中找到解决方案的服务)关闭时,另一个名为“搜索索引器”的服务(负责快速查找驱动器上的文件的服务)索引它们)开始出现故障。因此,Windows 会在几分钟内锁定您移动、复制或使用的任何内容以“索引”该文件,然后再释放它,然后您可以删除该文件。它使用进程 ID 号锁定它4 (PID:4)”。

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

于 2013-01-28T23:32:26.190 回答
0

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

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

于 2013-01-11T22:01:19.330 回答