-1
有沒有辦法來清除一個互斥體,如果創建它的過程是死了沒有?
詳情:
我用一個互斥體,以確保只有一個我的應用程序運行的實例。
雖然測試了一些新的代碼(做自動更新),我跑了Environment.Exit(0)。在調試模式下運行時,我的互斥鎖被清理得很好。
但是,當我改變了構建以「釋放」,那麼互斥退出通話後保持周圍,爲被遺棄的標記:
我有雙重檢查,以確保沒有這個互斥體所依附的進程仍在運行。
現在每次運行我的應用程序時,它都認爲互斥量仍然存在,並且不會啓動我的應用程序。 (這也崩潰,因爲它試圖將消息發送到應用程序的「正在運行」的實例,以顯示自己。)
我試圖釋放這樣的互斥體:
bool createdNew;
string applicationId = "18773:TestStudio";
var singleInstanceMutex = new Mutex(true, applicationId, out createdNew);
singleInstanceMutex.Close(); // Tried ReleaseMutex() too
當然,但只是得到它,然後釋放它。
我知道我可以重新啓動,但爲了更好地解決這種情況,在生產中發生這種情況時我正在跳轉。
如果創建它的進程已經死了並且不存在,是否有辦法清除互斥鎖?
根據你的屏幕截圖,3件事仍在引用它。關閉任何3件事仍然有處理。 – 2014-08-27 23:35:15
@Scott Chamberlain - 參考文獻仍然存在,但這個過程早已消失。它以不釋放參考的方式死亡。因此我的問題是如何釋放互斥鎖。 – Vaccano 2014-08-28 02:34:35
@Vccano那麼你有兩種情況之一。一個腐敗的操作系統安裝,或者有一個你沒有意識到的參考就是參考。如果它真的走了,那麼計數將爲0,從失敗的進程中清除句柄在Windows 95(或98,我不記得是哪個)中修復了。可能的情況是,程序不是真的死了,當你認爲它已經死了或者其他程序(IIS,一種殺毒軟件,誰知道)正在提取句柄並且沒有完成它時,它仍然存在。 – 2014-08-28 03:40:39