サーバーから.NET2.0アプリケーション(C#)のローカルマシンにファイルをコピーしようとしていますが、ソースファイルが不必要にロックされたままになっています。この動作を引き起こしているのはファイルサーバー上で構成されているものであると思われますが、何ができるかわかりません...あなたは何を助けることができますか?
ファイルコピー操作の後、ファイルサーバー(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()
このラインが終了した後も持続します。より複雑なアプリケーションでは、File.Copy()
出口のあるルーチンが終了すると(ただし、アプリケーションはまだ実行中です)、ロックは持続します。
アプリケーション全体が終了したときにのみ、ロックが解除されます。
sourceFile
UNCパスの代わりにマップされたドライブを使用するように変更しても、動作に違いはありません。
この動作は、ソースファイルが別のサーバーにある場合、またはローカルにある場合には発生しません。
の後に次の行を追加するFile.Copy
と、ロックはすぐに解放されます。
new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { sourceFile }).Demand();
これはすべて、この動作を引き起こしているサーバー上に何かがあるかのように聞こえます。サーバーには、McAfeeアンチウイルスとともにShadowProtectがインストールされています。それを除けば、WindowsServerとそのコンポーネントの上に何もインストールされていないように見えます。
また、ファイルに読み取り権限を要求することで問題が解決する理由もわかりません。
これらの質問にお答えいただければ幸いです。
- ファイルロックが持続する原因は何ですか?
- 読み取り許可を要求すると問題が解決するのはなぜですか?