C# 檢查應用是否已經運行的代碼
有些時候我們需要讓軟件單獨運行 而不是重復無理由運行,
我們舉個例子:如音樂播放軟件你能夠選擇重復運行嗎?
你在注冊表(Reg)中關聯了右鍵快捷打開方式,但是如果軟
件只是單純意味上的重復運行實例 想必用戶看到這樣的軟
件表情一定會很夸張 很讓人感到好笑。不過談正經的 如何
避免軟件多次運行 我給出兩種辦法,一種為互斥體(Mutex)
另一種為API Event兩種辦法都是比較好的,可以這樣理解
上面兩種辦法會在系統中注冊一個字符串標志 每次軟件啟動
時去檢查標志是否存在,然而軟件銷毀意味著 系統會自動替你
釋放掉該標志 所以我們是不需要去Close及CloseHandle而且
我并不建議大家沒事去關閉系統的內核對象 誰知道你會不會因
為操作造成程序或系統不穩定呢 誰也不能保證對吧 不過則論
易用性我倒是感到很不錯 挺人性化的 且不是花哨的技術 很難的。
using System.Threading;bool bCreatedNew; Mutex mutex = new Mutex(false, "MyApp", out bCreatedNew);
上面我們只需要判斷bCreatedNew是否為false則可以。如果沒有
創建成功或輸入false否則為true 我們既然要判斷系統中是否運行
了相同的軟件 而系統不允許我們注冊相同的標志 那么肯定會false
了,道理很容易說的通竅,對吧。下面我們講講API Event的辦法
using System.Runtime.InteropServices;const int NULL = 0; const int EVENT_ALL_ACCESS = 2031619; if (OpenEvent(EVENT_ALL_ACCESS, false, "MyApp")) { // 正在運行 } else { // 沒有運行 CreateEvent(NULL, false, false, "MyApp"); }
const int NULL = 0; const int EVENT_ALL_ACCESS = 2031619; if (OpenEvent(EVENT_ALL_ACCESS, false, "MyApp")) { // 正在運行 } else { // 沒有運行 CreateEvent(NULL, false, false, "MyApp"); }
本文由用戶 ny8p 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!