前言
默认情况下 WPF应用是能够多开的,但是大部分情况下我们只想打开一个实例,这就有两种情况
保留之前的进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); CheckProcess(); }
[DllImport("User32.dll")] private static extern int FindWindow(string className, string windowName);
[DllImport("user32.dll")] public static extern bool SetForegroundWindow(int hWnd);
private static void CheckProcess() { Console.WriteLine(@"程序启动"); Process current = Process.GetCurrentProcess(); string strProcessName = Process.GetCurrentProcess().ProcessName; var processList = Process.GetProcessesByName(strProcessName); if (processList.Length > 1) { MessageWindow.Show("当前程序已在运行,请勿重复运行。"); foreach (var process in processList) { if (process.Id == current.Id) continue; int hWnd = FindWindow(null, process.MainWindowTitle); SetForegroundWindow(hWnd); } Environment.Exit(1); } }
|
结束之前的进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); CheckProcess(); }
private static void CheckProcess() { Process current = Process.GetCurrentProcess(); Process[] processList = Process.GetProcesses(); foreach (Process process in processList) { if (process.ProcessName == Process.GetCurrentProcess().ProcessName) { if (process.Id != current.Id) { try { process.Kill(); } catch (Exception) { } } } } }
|