怎麼讓C 程式同時只能執行乙個例項

2022-03-28 13:37:58 字數 1283 閱讀 4910

雙擊乙個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

using

system;

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。乙個簡單思路 程式開始時建...