ASP.NET アプリケーションとコンソール アプリケーション間のファイル アクセスの同期に、グローバルな名前付きミューテックスを使用しています。
ASP.NET アプリケーションの実行中に、コンソール アプリケーションがミューテックスの取得に失敗する - 予想どおり。コンソール アプリケーションの実行中に、ASP.NET アプリケーションがスローします。UnauthorizedAccessException: Access to the path 'Global\TheNameOfTheMutex' is denied.
例外をキャッチして、ミューテックスの取得に失敗したように処理しようとしますが、なぜこのように動作するのか知りたいですか? ASP.NET アプリケーションは、2 つの異なるブラウザーからアクセスした場合に期待どおりに実行され、コンソール アプリケーションも複数のインスタンスを実行している場合に期待どおりに実行されます。
更新: Windows XP では、ASP.NET アプリケーションの実行中にコンソール アプリケーションを起動しようとすると、例外もスローされます。
同期に使用されるコードは、共通のアセンブリにあります。
using (Mutex m = new Mutex(false, "Global\\TheNameOfTheMutex")) // exception thrown
{
try
{
lock = m.WaitOne(0, false);
}
catch (AbandonedMutexException)
{
// ...
}
if(lock)
{
// ...
m.ReleaseMutex();
}
}
環境: Windows Server 2008、IIS 7、ASP.NET 2.0