【问题标题】:How to prevent multiple app loading, but allow loading its different instances? [duplicate]如何防止多个应用程序加载,但允许加载其不同的实例? [复制]
【发布时间】:2017-08-16 09:34:35
【问题描述】:

我有一个无法多次加载的测试应用程序。它工作正常。

 private void App_OnStartup(object sender, StartupEventArgs e)
        {
    if (Process.GetProcessesByName(currentProcess.ProcessName).Length > 1)
                    {
                            MessageBox.Show("Instance already running", "Warning");
                            Application.Current.Shutdown();
                        }
    }
}

但是,如果单个用户想要使用另一个实例创建此应用程序的快捷方式怎么办?例如"Test.exe" 2

这个应用程序应该只加载一次,当它像“Test.exe 2”一样启动时。我在e.Args[0] 中收到了这个数量的实例,然后我需要保留它以与此时此应用程序的另一个快捷方式进行比较。

那么问题来了:我该怎么做?如何将现有进程与不同实例的编号进行比较。任何想法表示赞赏!

【问题讨论】:

  • @ASh 除了使用互斥锁还有其他方法吗,你觉得如何?
  • 为什么叫它“实例号”?这只是一个命令行参数。无论如何检查进程名称也没有意义,用户可以复制您的应用程序并重命名可执行文件。

标签: c# .net wpf


【解决方案1】:

您可以使用Mutex 来防止您的应用程序中的多个实例同时运行,而不管可执行文件的名称或路径如何:

Prevent multiple instances of a given app in .NET?

【讨论】:

  • 互斥锁不起作用
  • 为什么不呢?
  • 我猜不是,我可以同时执行许多当前的应用程序
  • 您不应该提供 Mutex 的名称在所有实例中都相同。复制代码并自己尝试一下。
猜你喜欢
  • 2012-01-19
  • 2020-05-24
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 2012-02-06
  • 1970-01-01
相关资源
最近更新 更多