2011-12-09 27 views
2

我創建並在窗口服務互斥鎖甚至沒有發現,當OS報告說,它的存在

using(var m = new Mutex(false,"mymutex") 
{ 
    m.WaitOne(); 
    //to my things for a long time 
    m.ReleaseMutex(); 
} 

在另一程序使用互斥具有管理員權限運行我做

Mutex.OpenExisting("mymutex") 

,並拋出互斥不存在。我可以在資源管理器中看到,Windows服務引用了互斥鎖。

有什麼不對?

+0

你能否像普通程序那樣運行你的服務(或者改變它在services.msc中的運行方式來使用你的windows用戶憑證)並告訴我們這是否有幫助?我想我知道什麼是錯的,我想確保 –

+0

你得到了什麼特殊的例外? –

+0

@WiktorZychla標準WaitHandleCannotBeOpenedException – Rohit

回答

2

像Mutex這樣的操作系統對象具有會話範圍。您的服務在會話0中運行,因此它的互斥對於在桌面會話上運行的進程不可見。該解決方法很簡單,前綴Global\爲互斥體名稱。