2

Kinect SDK 1.6 で XNA アプリケーションを作成する Visual Studio 2010 を使用しています。アプリケーションをデバッグした後、ビルドが通常 (常にではありません) 失敗するという問題があります。ロックしているプロセスがあります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クラスでは、使用したいくつかのテクスチャ、 my SpriteBatchandを破棄しGraphicsDeviceます。

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

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

誰か提案がありますか?それとも、私が犯した明らかな間違いがありますか?

編集 1: Kinect のポーリング方法を使用していることを忘れていました。そのため、イベントの登録を解除していません。

編集2:明確にするために、システムプロセスは最終的にファイルを解放します-ロックされたままにはなりません。通常、これには 1 ~ 2 分かかると思います。

更新 1:ウイルス対策ソフトウェアをインストールしています。無効にしましたが、問題は解決していません。

更新 2:これは私のデスクトップ マシンに固有の問題であることを確認できました。私はまだラップトップで問題を再現していません。

4

2 に答える 2

8

フォーラムで「システム プロセス "異常"」というタイトルのディスカッションを見つけました。

これは、Jblom1986 の投稿から取得したものです。彼の解決策は私の問題を解決しました。変更を行うには、msconfig.exeを使用してサービスタブに移動します。

「 「アプリケーション エクスペリエンス」という名前の Windows サービス(何かがクラッシュしたときに Microsoft データベースで解決策を見つけるサービス) がオフになると、「検索インデクサー」という名前の別のサービス(ドライブ上のファイルをすばやく検索するサービス)その結果、Windows は、移動、コピー、またはこのファイルを「インデックス化」するために数分間使用したものをすべてロックしてから、同じファイルを削除できるようにします。プロセス ID 番号でロックします。 4 (PID:4)".

編集:これはWindows 7マシン上にありました。他のバージョンの Windows でこのエラーが発生するかどうかはわかりません。

于 2013-01-28T23:32:26.190 に答える
0

Windows は、プロセスが終了時にすべてのハンドルを閉じることを保証します。破損した OS を除いて、プロセスが何があっても終了すると、ハンドルは閉じられます。

ほとんどの場合、そのファイルを開いてスキャンするウイルス対策または同様のプロセスがあります。

于 2013-01-11T22:01:19.330 に答える