2008-12-10 50 views
6

我正在使用全局命名互斥體進行ASP.NET應用程序和控制檯應用程序之間的文件訪問同步。C#互斥體 - 從ASP.NET和控制檯應用程序調用錯誤

運行ASP.NET應用程序時,控制檯應用程序無法獲取互斥鎖 - 如預期的那樣。在運行控制檯應用程序時,ASP.NET應用程序拋出UnauthorizedAccessException: Access to the path 'Global\TheNameOfTheMutex' is denied.

我會嘗試捕獲異常並將其視爲未能獲取該互斥鎖,但我想知道爲什麼它的行爲如此?如果從兩個不同的瀏覽器訪問ASP.NET應用程序,並且控制檯應用程序在運行多個實例時也按預期運行,則ASP.NET應用程序按預期運行。

更新:在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

回答

11

你有正確的用戶設置來訪問資源?使用

MutexSecurity and MutexAccessRule ? 

嘗試在MSDN http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.mutexsecurity.aspx

http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.mutexaccessrule.aspx

附註:看着這個我在等待一個喬恩斯基特答案展示我在這個問題上的無知... =>

+2

我的‘答案’僅僅是+1你的,因爲它看起來完全對我:) – 2008-12-10 12:11:47