我前面的三篇文章是從網上找到的(以下連接),都說是實現程序只啓動一次的功能。html
C#防止程序屢次運行
C#檢測程序重複運行的函數(能夠在多用戶登陸狀況下檢測)
C# 實現程序只啓動一次(屢次運行激活第一個實例,使其得到焦點,並在最前端顯示)
C# 實現程序只啓動一次(實現程序自重啓)前端
若是你已經讀了前面的幾篇文章,我相信你本身或許已經有答案了,我本身用下來感受仍是有一些區別的,如今把我總結的記錄下來:函數
一:使用System.Threading.Mutex類測試
using (System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out createNew))
使用這個方法,我本身測試下來,在Windows的單一用戶使用的時候可使用,當多個Windows用戶同時使用的時候則沒法檢測到程序是否在運行狀態。ui
二:檢查進程名的htm
Process[] processes = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
使用這個方法能夠檢查當前機器上的全部進程名稱,多個用戶也能夠同時檢測。可是若是程序更名運行,則沒法檢測到程序是否在運行狀態。blog
三:使用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二: [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的使用get
API一,可使程序前端顯示出來,而且獲取爲焦點。
API二,其實更像System.Threading.Mutex類,cmd
由於在項目中暫時沒有使用這些功能,因此沒有太多的意見。