我前面的三篇文章是從網上找到的(如下鏈結),都說是實現程式只啟動一次的功能。
c#防止程式多次執行
c#檢測程式重複執行的函式(可以在多使用者登入情況下檢測)
c# 實現程式只啟動一次(多次執行啟用第乙個例項,使其獲得焦點,並在最前端顯示)
c# 實現程式只啟動一次(實現程式自重啟)
一:使用system.threading.mutex類
使用這個方法,我自己測試下來,在windows的單一使用者使用的時候可以使用,當多個windows使用者同時使用的時候則無法檢測到程式是否在執行狀態。
二:檢查程序名的
process processes = process.getprocessesbyname(process.getcurrentprocess().processname);使用這個方法可以檢查當前機器上的所有程序名稱,多個使用者也可以同時檢測。但是如果程式改名執行,則無法檢測到程式是否在執行狀態。
三:使用api
api一:[dllimport("user32.dll")]
private static extern bool showwindowasync(intptr hwnd, int cmdshow);
[dllimport("user32.dll")]
private static extern bool setforegroundwindow(intptr hwnd);
api二:這個方法在我前面的文章中已經提到了兩種api的使用[dllimport("kernel32.dll", charset = charset.auto)]
private static extern intptr openmutex(
uint dwdesiredaccess, // access
int binherithandle, // inheritance option
string lpname // object name
);[dllimport("kernel32.dll", charset = charset.auto)]
private static extern intptr createmutex(
intptr lpmutexattributes, // sd
int binitialowner, // initial owner
string lpname // object name
);
api一,可以使程式前端顯示出來,並且獲取為焦點。
api二,其實更像system.threading.mutex類,
因為在專案中暫時沒有使用這些功能,所以沒有太多的意見。
讓程式只啟動一次
讓程式只啟動一次 有時在開發程式的時候,有時需要只能同時執行乙個例項.mutex 類,稱為互拆體,是乙個同步基元,它只向乙個執行緒授予對共享資源的獨佔訪問權。當兩個或更多執行緒需要同時訪問乙個共享資源時,系統需要使用同步機制來確保一次只有乙個執行緒使用該資源。如果乙個執行緒獲取了互斥體,則要獲取該互...
C 讓windows程式只執行一次
方法一 使用mutex來進行 1 首先要新增如下的namespace using system.threading 2 修改系統main函式,大致如下 bool bcreatednew create a new mutex using specific mutex name mutex m new ...
利用勸告鎖實現程式只執行一次
1.由於需要,乙個業務程式一天之中可能要被多次使用,但同一時間只能有乙個人使用,於是我們得想個辦法保證互斥。程序間通訊有很多種方式,訊號量就不錯。但學習使用下檔案鎖,更簡潔一點。2.檔案系統級別的鎖有四種,最基本的兩種是勸告鎖和強制鎖,剩下的兩種是強制鎖的變種。應用級別上對鎖的操作有兩種,加讀鎖,或...