通過個人測試,還比較好用,可是有個問題,若是不註銷,用另外一個用戶進入,則程序不能判斷出已運行。因此只限於用在單用戶環境,仍是不太完美。app
class Program { [STAThread] static void Main(string[] args) { //防止程序屢次運行 if (!OneInstance.IsFirst("MyTest")) { Console.WriteLine("警告:程序正在運行中! 請不要重複打開程序!可在右下角系統欄找到!"); return; } Console.WriteLine("正在運行中"); Console.ReadLine(); } } public static class OneInstance { ///<summary> ///判斷程序是否正在運行 ///</summary> ///<param name="appId">程序名稱</param> ///<returns>若是程序是第一次運行返回True,不然返回False</returns> public static bool IsFirst(string appId) { bool ret = false; if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero) { CreateMutex(IntPtr.Zero, 0, appId); ret = true; } return ret; } [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 ); }
出處:http://blog.csdn.net/lanman/article/details/3648455測試