私のWin32アプリA1(実際にはプロセスのコレクション)はCreateDirectory
、親ディレクトリP内にディレクトリD1を作成するために使用しようとしています。PへのパスはTMP
環境変数の値であり、Pは潜在的にビジーですが、一般的に許容できる場所になります。ほとんどの場合、すべてが正常に機能しますが、CreateDirectory
失敗してGetLastError
から戻ることはめったにERROR_ACCESS_DENIED
ありません。このコンテキストでの意味は文書化されていません。
P内で可能な限り高速にディレクトリD2を繰り返し作成および削除するだけのテストアプリケーションA2を作成し、他のプログラムが使用するものと衝突しないと確信しているD2に間抜けな長い名前を選択しました。 。数分に1回、A2がD2を作成しようとすると、ほんの一瞬でERROR_ACCESS_DENIED
失敗が発生します。
A1は、実行中にP内で非常にビジーになります。ERROR_ACCESS_DENIED
A1とA2が同時に実行されている間、A1とA2がPへの排他的アクセスを競合しているように、障害の期間がいくらか頻繁に発生します(A1がD2と同じ名前を使用していないことは間違いありません。:-)
「数ミリ秒後にもう一度やり直してください。数回試してもうまくいかない場合は、あきらめてください」という意味になりがちですERROR_ACCESS_DENIED
が、[a]場合によっては永続的なものになるのではないかと心配しています。すぐに注意する必要があります。[b]何が起こっているのかよくわからないため、試行を続けるための妥当な時間を自信を持って確立できない可能性があります。
誰かがこれを経験したことがありますか?何かアドバイス?この時点で特に価値があるのは、これを引き起こす原因についての手がかりになるので、問題をより簡単に再現できます。