使用 互斥Mutex 保证应用程序只运行一个实例, 代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Threading; using System.Runtime.InteropServices; namespace TestPlatform { static class Program { private static Mutex _mutex = null; private static string _mutexName = "ONLYONE_APP"; private static string _titleName = "Gps设备生产测试平台"; /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { // 单一实例 try { _mutex = Mutex.OpenExisting(_mutexName); MessageBox.Show(_titleName + "已经运行, 请确认!", "不可重复执行", MessageBoxButtons.OK, MessageBoxIcon.Stop); IntPtr _handle = FindWindow(null, _titleName); if (_handle != IntPtr.Zero) { //MessageBox.Show("find application."); ShowWindow(_handle, SW_RESTORE);// 还原 } Application.Exit(); } catch (WaitHandleCannotBeOpenedException ex) // 不存在此 mutex { _mutex = new Mutex(true, _mutexName); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FormMain()); _mutex.ReleaseMutex(); } } [DllImport("user32.dll")] private static extern IntPtr FindWindow(string className, string windowName); [DllImport("user32.dll")] private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); private const int SW_RESTORE = 9; } }