如何检查WPF应用程序是否已在运行?

可能重复:
创建单个实例应用程序的正确方法是什么?

如何检查我的应用程序是否已打开? 如果我的应用程序已在运行,我想显示它而不是打开一个新实例。

[DllImport("user32.dll")] private static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow); static void Main() { Process currentProcess = Process.GetCurrentProcess(); var runningProcess = (from process in Process.GetProcesses() where process.Id != currentProcess.Id && process.ProcessName.Equals( currentProcess.ProcessName, StringComparison.Ordinal) select process).FirstOrDefault(); if (runningProcess != null) { ShowWindow(runningProcess.MainWindowHandle, SW_SHOWMAXIMIZED); return; } } 

方法2

 static void Main() { string procName = Process.GetCurrentProcess().ProcessName; // get the list of all processes by the "procName" Process[] processes=Process.GetProcessesByName(procName); if (processes.Length > 1) { MessageBox.Show(procName + " already running"); return; } else { // Application.Run(...); } } 
 public partial class App { private const string Guid = "250C5597-BA73-40DF-B2CF-DD644F044834"; static readonly Mutex Mutex = new Mutex(true, "{" + Guid + "}"); public App() { if (!Mutex.WaitOne(TimeSpan.Zero, true)) { //already an instance running Application.Current.Shutdown(); } else { //no instance running } } } 

这是一行代码,它将为您做到这一点……

  if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1) { // Show your error message } 

做这个 :

  using System.Threading; protected override void OnStartup(StartupEventArgs e) { bool result; Mutex oMutex = new Mutex(true, "Global\\" + "YourAppName", out result); if (!result) { MessageBox.Show("Already running.", "Startup Warning"); Application.Current.Shutdown(); } base.OnStartup(e); }