让程序只运行一个实例:
private static System.Threading.Mutex mutex; /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { bool runNew; mutex = new System.Threading.Mutex(true, "myproject", out runNew); if (runNew) { mutex.ReleaseMutex(); // Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } else { MessageBox.Show("程序已经在运行。"); } }
让程序只运行一个实例,如果已运行会显示正在运行的窗口:
static void Main() { Process instance = RunningInstance(); if (instance == null) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Login()); } else { HandleRunningInstance(instance); } } //返回正在运行的程序进程 public static Process RunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(current.ProcessName); foreach (Process process in processes) { if (process.Id != current.Id) { if (Assembly.GetExecutingAssembly().Location.Replace("/ ", "\\ ") == current.MainModule.FileName) { return process; } } } return null;//第一次运行,返回null } //显示正在运行的进程当前窗口 public static void HandleRunningInstance(Process instance) { ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); //置窗口为正常状态 SetForegroundWindow(instance.MainWindowHandle); } #region调用系统api [DllImport("User32.dll ")] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); [DllImport("User32.dll ")] private static extern bool SetForegroundWindow(IntPtr hWnd); private const int WS_SHOWNORMAL = 1; #endregion