如何检查 WPF 应用程序是不是已在运行? [复制]

Posted

技术标签:

【中文标题】如何检查 WPF 应用程序是不是已在运行? [复制]【英文标题】:How to check if a WPF application is already running? [duplicate]如何检查 WPF 应用程序是否已在运行? [复制] 【发布时间】:2011-08-24 22:12:31 【问题描述】:

可能重复:What is the correct way to create a single instance application?

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

【问题讨论】:

是每台计算机、每用户还是每台桌面一个实例? 【参考方案1】:
[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; 
    

方法二

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(...);
    

【讨论】:

感谢重播,但我不清楚。我不知道在哪里使用此代码。在主窗口或 app.xaml 中?如果登录对话框结果 = true,则主窗口正在打开。我什至不知道如何显示,最大化打开的应用程序 这段代码应该去main方法。在这里查看有关 main 方法的更多信息。 joyfulwpf.blogspot.com/2009/05/… 使用 System.Windows.Application.Current.Shutdown();而不是重新运行【参考方案2】:
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
            
        
    

【讨论】:

不适用于我的 .NET 4.0 WPF 应用程序?【参考方案3】:

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

 if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)

// Show your error message

【讨论】:

这是实际答案。只需将其放入 Application_Startup 即可。【参考方案4】:

这样做:

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

【讨论】:

这不会显示现有实例的窗口 我刚刚测试过了。第一次运行应用程序时,表单会正常显示。第二次,您会看到一个对话框,上面写着“已经在运行”,当您关闭该对话框时,什么也没有发生。 OP 希望在这种情况下显示应用程序的原始实例。使用您的解决方案,如果我最小化原始实例,或者将记事本放在它前面,它不会被带到前台。 @Chris- 感谢您的关注我没有仔细阅读问题。 不适用于我的 .NET 4.0 WPF 应用

以上是关于如何检查 WPF 应用程序是不是已在运行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在调用之前检查 Java Web 服务是不是已在 PL/SQL 中启动并运行

如何检查应用程序是不是在任何屏幕上运行全屏模式?

如何检查重用标识符是不是已在 UITableView 中注册?

检查 WPF 应用程序的其他实例是不是正在运行 [重复]

如何检查用户是不是已在 React Native Android 中授予相机权限?

如何检查电子邮件地址是不是已在 iOS 上的 Firebase 中使用?