C# 實現程序只啟動一次(總結)


我前面的三篇文章是從網上找到的(如下鏈接),都說是實現程序只啟動一次的功能。

C#防止程序多次運行
C#檢測程序重復運行的函數(可以在多用戶登錄情況下檢測)
C# 實現程序只啟動一次(多次運行激活第一個實例,使其獲得焦點,並在最前端顯示)
C# 實現程序只啟動一次(實現程序自重啟)

如果你已經讀了前面的幾篇文章,我相信你自己或許已經有答案了,我自己用下來感覺還是有一些區別的,現在把我總結的記錄下來:

一:使用System.Threading.Mutex類

using (System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out createNew)) 

使用這個方法,我自己測試下來,在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二:
        [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一,可以使程序前端顯示出來,並且獲取為焦點。
API二,其實更像System.Threading.Mutex類,

因為在項目中暫時沒有使用這些功能,所以沒有太多的意見。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM