Выходной файл заблокирован другим процессом при создании

Я использую Visual Studio 2010, создавая приложение XNA с Kinect SDK 1.6. У меня проблема с тем, что сборка обычно терпит неудачу (не всегда) после отладки приложения. Существует процесс блокировки 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 я использую несколько текстур, которые я использовал, мои SpriteBatch и GraphicsDevice:

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

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

Есть ли у кого-нибудь предложения? Или есть явная ошибка, которую я сделал?

Изменить 1: Я забыл упомянуть, что я использую метод опроса для Kinect, поэтому я не зарегистрирован для каких-либо событий.

Изменить 2: Для выяснения, системный процесс в конечном итоге освобождает файл - он не остается заблокированным. Я думаю, что это обычно занимает от одной до двух минут.

Обновление 1: У меня установлено антивирусное программное обеспечение. Я отключил его, но он не решил проблему.

Обновление 2: Я могу подтвердить, что это проблема, характерная для моего настольного компьютера. Я еще не воспроизвел проблему на своем ноутбуке.

Ответ 1

Я нашел дискуссию на форуме с названием " Системный процесс" аномалия".

Это взято из сообщения Jblom1986. Его решение решило мою проблему. Чтобы внести изменения, перейдите на вкладку службы, используя msconfig.exe.

"Когда служба Windows с именем " Опыт приложения " (служба, которая когда-то сбой находит решение в базе данных Microsoft), отключена, другая служба с именем " Search Indexer " (служба, которая отвечает за быстрый поиск файлов на диске, индексируя их) начинает работать неправильно. В результате окна блокируют все, что вы переместили, скопировали или использовали в течение нескольких минут, чтобы" индексировать "этот файл перед выпуском после чего вы можете удалить тот же файл. Он блокирует его с помощью идентификатора процесса 4 (PID: 4)".

Изменить: Это было на компьютере с Windows 7. Я не уверен, что другие версии Windows имеют эту ошибку.

Ответ 2

Windows гарантирует, что процесс завершит работу с каждым дескриптором. За исключением поврежденной ОС, ваши дескрипторы закрываются, когда ваш процесс выходит независимо от того, что.

Скорее всего, у вас есть антивирус или аналогичный процесс, который открывает и сканирует этот файл.