关闭旧的应用程序实例

时间:2014-06-03 07:17:59

标签: c#

我正在开发一个程序,其中只有一个实例可以运行。我知道我可以应用互斥锁来防止多个实例运行。

但我希望如此,如果应用程序的新实例运行,它应该终止旧的实例。 可执行文件将始终具有相同的名称。

我已尝试在表单加载事件上运行以下内容;

    Process[] pname = Process.GetProcessesByName(AppDomain.CurrentDomain.FriendlyName.Remove(AppDomain.CurrentDomain.FriendlyName.Length - 4));

    if (pname.Length > 1)
    {
        pname[0].Kill();
    }

哪个确实有效.....每次蓝月亮一次。说真的,它工作..第一次,第二次应用程序将根本不加载。如果我运行它大约5次,它可能会运行。

它看起来不太可靠,是否有人可能有更优雅的解决方案?

谢谢!

3 个答案:

答案 0 :(得分:7)

这对我有用

if (pname.Length > 1)
{
    pname.Where(p => p.Id != Process.GetCurrentProcess().Id).First().Kill();
}

答案 1 :(得分:1)

您可以尝试使用此代码而不是使用可执行文件名来获取进程

Process currentProcess = Process.GetCurrentProcess();
Process[] processItems = Process.GetProcessesByName(currentProcess.ProcessName);

答案 2 :(得分:0)

你可以改变你的逻辑。当您基于条件pname运行另一个实例时,为什么不调用Environment.Exit。长度== 1