以下に示す関数を呼び出す単純な C# コンソール プログラムがあります。
static void DirTest()
{
string dir = "Temp";
for (int i = 0; i < int.MaxValue; i++)
{
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
string file = Path.Combine(dir, "sample.txt");
File.Create(file).Close();
File.Delete(file);
Directory.Delete(dir);
}
}
一部の Win 7 マシンでは、この関数は最終的に例外をスローします (i が 100,000 を超える場合)。
未処理の例外: System.UnauthorizedAccessException: パス 'D:\...\Temp\sample.txt' へのアクセスが拒否されました。 System.IO.__Error.WinIOError (Int32 errorCode、文字列の多分フルパス) で System.IO.FileStream.Init (文字列パス、FileMode モード、FileAccess アクセス、Int32 権限、 ブール値の useRights、FileShare 共有、Int32 bufferSize、FileOptions オプション、SECURITY_ATTRIBU TES secAttrs、文字列 msgPath、ブール値 bFromProxy) System.IO.FileStream..ctor (文字列パス、FileMode モード、FileAccess アクセス、FileShare sh は、Int32 bufferSize、FileOptions オプション) System.IO.File.Create (文字列パス) で D:\Exceptions\Program.cs:line 118 の Exceptions.Program.DirTest() で D:\Exceptions\Program.cs の Exceptions.Program.Main(String[] args): 167行目
これらのマシンには、McAfee エージェントと Cisco セキュリティ エージェント、およびその他のソフトウェアのホストがインストールされています。Windows Defender が無効になっています。プログラムは管理者コンソールで実行されています。プログラムは .net 3.5 用にコンパイルされています。これは、W2k3 または XP マシンでは見られませんでした。
procmon を使用して、"Temp\sample.txt" が作成および削除されたフォルダーにアクセスしているすべてのイベントとプロセスを監視すると、test-application を除いて他のプロセスがパスにアクセスしていないことがわかります。例外の後でも、procmon にリストされている他のプロセスはありません。したがって、それがウイルス対策のせいだと証明することはできません。
誰が何が間違っているのか考えていますか? Win7 の .net でバグを見つけましたか ;)
ありがとう!