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

C# 如何检查WPF应用程序是否已在运行?,c#,.net,wpf,single-instance,C#,.net,Wpf,Single Instance,可能重复: 如何检查我的应用程序是否已打开?如果我的应用程序已经在运行,我希望显示它,而不是打开一个新实例 [DllImport("user32.dll")] private static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow); static void Main() { Process currentProcess = Process.GetCurrentProcess(); var runningPr

可能重复:

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

[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(...);
    }
}
这样做:

    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);
    }

这里有一行代码可以帮你做到这一点

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

这不会显示现有实例的窗口。我刚刚测试了它。第一次运行应用程序时,表单会正常显示。第二次,你会看到一个对话框,上面写着“已经在运行”,当你关闭这个对话框时,什么也没有发生。OP希望在这种情况下显示应用程序的原始实例。使用您的解决方案,如果我最小化原始实例,或将记事本放在它前面,它不会被带到前台。@克里斯-谢谢您的关注我没有仔细阅读问题。不适用于我的.NET 4.0 WPF应用程序。它是每台计算机、每名用户还是每台桌面一个实例?谢谢重播,但我不清楚。我不知道在哪里使用这个代码。在主窗口中还是在app.xaml中?如果登录对话框结果为true,则主窗口将打开。我甚至不知道如何显示,最大化打开的应用程序这段代码应该转到main方法。有关main方法的更多信息,请参见此处。使用System.Windows.Application.Current.Shutdown();而不是Retrun不适用于我的.NET 4.0 WPF应用程序?
 if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
{
// Show your error message
}