使用已运行的应用实例

6 浏览
0 Comments

使用已运行的应用实例

这个问题已经在这里有了答案:

可能是重复:

什么是创建单个实例应用程序的正确方式?

如何实现每台计算机的单个实例应用程序?

我有一个Winform应用程序,它将一个参数作为参数。

static class Program
{
    [STAThread]
    static void Main(string[] args)
    {           
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Gauges(args));
    }
}

这个程序每天被另一个应用程序执行多次。

我是否可以检查我的程序是否已经在运行,如果是,则可以使用具有最新参数的运行实例吗?

admin 更改状态以发布 2023年5月23日
0
0 Comments

您可以使用互斥锁来阻止应用程序的多个副本运行。此处有一篇关于使用互斥锁的非常好的文章:http://sanity-free.org/143/csharp_dotnet_single_instance_application.html

关于将参数传递给已经运行的进程,您需要实现某种形式的IPC来通知正在运行的实例有新参数。您可以使用多种解决方案,如套接字、命名管道等。

0
0 Comments

我的程序是否已经在运行中可以检查吗?

您可以在应用程序中使用Mutex

bool alreadyPresent  =false;
using (Mutex mutex = new Mutex(true, "YourAppName", out alreadyPresent  ))
{
    if(alreadyPresent ) {
       //APP ALREADY PRESENT 
    }
}

Mutex是操作系统的构件,因此,应用程序的不同实例(可执行文件)可以访问相同的对象。

我能使用具有最新参数的运行实例吗?

这取决于您如何管理应用程序。您可以使用一些IPC机制将所需参数通信到已经运行的进程中。

0