ファイルをサーバーから.NET 2.0アプリケーション(C#)のローカルマシンにコピーしようとしていますが、ソースファイルが不必要にロックされています。この動作を引き起こしているファイルサーバー上に構成されているものと思われますが、何が助けになるのでしょうか?File.Copyは完了後にソースファイルをロックします
ファイルコピー操作後、ファイルサーバー(Windows 2K3 R2)は、サーバー上のファイルで操作が行われなくても、ソースファイルが読み取りロックで保持されていると報告します。アプリケーションが終了すると、ロックが解除されます。
私たちも、以下の見最も基本的なコードで、現象を再現することができます:
static void Main(string[] args)
{
string sourceFile = @"\\win2K3server\resource\Production\IQE\sourceFolder\iqeconsole.exe";
string destinationFile = @"d:\destinationFolder\iqeconsole.exe";
System.IO.File.Copy(sourceFile,destinationFile,true);
Console.ReadLine();
}
ロックが実行File.Copy()
ラインの間にすぐにoccurrs、このラインが終了した後に持続します。より複雑なアプリケーションでは、File.Copy()
のルーチンが終了すると(ただし、アプリケーションはまだ実行されています)、ロックは維持されます。
アプリケーション全体が終了したときにのみロックが解除されます。
sourceFile
を変更しても、UNCパスの代わりにマップされたドライブを使用しても、動作に違いはありません。
ソースファイルが別のサーバーにある場合、またはローカルにある場合、この現象は発生しません。
我々はFile.Copy
後に以下の行を追加すると、ロックがすぐに解放されます。
new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { sourceFile }).Demand();
このこの動作を引き起こしているサーバー上の何かがあるかのように、すべては私たちに聞こえます。私たちはShadowProtectをMcAfeeアンチウィルスと一緒にサーバーにインストールしています。それとは別に、Windows Serverとそれ以上のコンポーネントには何もインストールされていないように見えます。
なぜファイルに対する読み取りアクセス許可を要求することで問題が解決するのかもわかりません。
あなたはこれらの質問に答えることができれば、我々は非常に感謝します:
- ファイルロックが持続する原因は何?
- なぜ読み取り権限を要求すると問題が解決されるのですか?
更新:この問題は、もはや再現可能ではありません。それは解決したようです。 McAfeeが問題を引き起こしているかどうかを確認することはできませんでした(ただし、調査中に解決した問題と関連している可能性があります)。 – Jayden
@ Jarden:File.Copyと同じ問題がありました。 File.Copy()の次の文がDeleteの場合、Exceptionへのアクセスが報告されました。問題は非決定的に発生していましたが、上記のDemand()メソッドは問題を解決しました。私の知る限りでは、この問題はウイルス対策ソフトウェアから独立しています。 – PanJanek
私は同じ問題を抱えていますが、McAfee、AVGを実行していることは間違いありませんが、ファイルmontiorが無効になっています。私はUnlockerを使ってファイルをロックしていることを教えてくれて、それが自分のアプリケーションであることに同意します。だから私はまだ監督が外れたと思うよ!しかし、あなたの解決策を実装することで、私の問題は解決しますので、今度は –