关闭旧的应用程序实例

本文关键字:应用程序 实例 | 更新日期: 2023-09-27 18:06:15

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

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

我已经尝试在表单加载事件上运行以下命令;

    Process[] pname = Process.GetProcessesByName(AppDomain.CurrentDomain.FriendlyName.Remove(AppDomain.CurrentDomain.FriendlyName.Length - 4));
    if (pname.Length > 1)
    {
        pname[0].Kill();
    }

实际上是可行的.....千载难逢。说真的,这很管用……第一次运行时,第二次应用程序将无法加载。如果我再运行5次,它可能会运行。

它似乎不太可靠,有没有人有更优雅的解决方案?

谢谢!

关闭旧的应用程序实例

这对我有用

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

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

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

你可以改变你的逻辑。为什么不打电话给环境部。当基于条件pname运行另一个实例时退出。长度= = 1