雙擊乙個winform程式,會開啟乙個介面,也即執行了乙個程式的例項;雙擊多次的時候,會出現多個程式介面。有時候我們需要只允許程式只能同時執行乙個例項。實現方式有很多。
一. 程序互斥
原理:通過獲取系統程序列表,如果發現有重名的,則表示程式已經執行了,此時新執行的程序就退出;
實現:system.diagnostics.process類的靜態方法getprocessesbyname(string processname)
process ps = process.getprocessesbyname("guo.exe");
if (ps != null && ps.length > 1
)
寫在main方法裡;判斷length大於1,是因為本身啟動之後也在程序列表裡了,第一次啟動的時候length==1;
優點:**簡單;
缺點:會把別的重名程式誤認為是自己(如很多軟體都有update.exe);可以通過複製多個exe並起不同名字來達到執行多個例項的目的;
二. 共享鎖(檔案、登錄檔)
原理:執行程式時,在乙個公共的位置建立乙個共享值(如在固定目錄建立乙個檔案,或者在固定的登錄檔位置建立乙個值),退出程式時刪除該值。若執行時發現值已經在,則表示程式已經在執行,此時新執行的程序就退出;
實現:略;
優點:邏輯好理解;
缺點:若程式沒有正常退出,共享值沒有被刪除,會導致程式無法再啟動;
三. 執行緒互斥
原理:通過乙個唯一標識建立程序互斥體,啟動時判斷互斥體是否已經存在,若存在則表示是重複程序;
實現:使用system.threading.mutex
usingsystem;
using
system.collections.generic;
using
system.text;
using
system.diagnostics;
using
system.reflection;
using
system.runtime.interopservices;
namespace
_mutex.releasemutex();}}
}
優點:真正能做到同乙個程式只允許執行乙個程序;
缺點:暫無
注意:如果用不同使用者同時登陸windows,仍然可以各自執行乙個例項;如果想要不同使用者也只能執行乙個例項,那麼,上面的guid變數需要加上字首「global\\」,詳細可參看
Delphi XE讓應用程式同時只執行乙個的方法
如果想讓delphi應用程式在一台電腦上只執行一次,最便捷的方法就是建立互斥變數。在工程檔案中加入一下 進行改造就可以。varbegin endelse begin tstylemanager.trysetstyle slate classico frmsplash.show frmsplash.u...
C 學習筆記七 乙個程式只能執行乙個
參考 c 如何讓同乙個視窗只能開啟一次和乙個程式只能同時開啟乙個 參考 c 實現讓程式只能開啟乙個例項 總結3方法 參考 c winform如何使自己的程式只執行一次 判斷程序法 修改程式名字後依然能執行 process current process.getcurrentprocess proce...
使程式只能執行乙個例項
使我們的程式只能有乙個正在執行的例項。並且在第二次執行時,若前乙個例項主視窗處於最小化狀態,就讓前乙個例項恢復原大小顯示出來。前一例項程序執行期間得留下乙個可供後一例項程序判斷的標誌,類似程序間通訊,可以參考一些ipc的方式。不過這裡不需要傳遞多少資料,僅僅有個標誌就ok。乙個簡單思路 程式開始時建...