使用已在运行的应用程序实例
本文关键字:应用程序 实例 运行 | 更新日期: 2023-09-27 17:56:31
可能的重复项:
创建单实例应用程序的正确方法是什么?
如何实现单机单实例应用?
我有一个Winform应用程序,它将一个参数作为参数。
static class Program
{
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Gauges(args));
}
}
该程序每天由另一个应用程序执行数次。
是否可以检查我的程序是否已经在运行,如果是,我是否可以使用带有最新参数的正在运行的实例?
是否可以检查我的程序是否已经在运行
您可以在应用程序中使用互斥体
bool alreadyPresent =false;
using (Mutex mutex = new Mutex(true, "YourAppName", out alreadyPresent ))
{
if(alreadyPresent ) {
//APP ALREADY PRESENT
}
}
互斥是操作系统工件,因此,应用程序(可执行文件)的不同实例可以访问同一对象。
是否可以将正在运行的实例与最新参数一起使用?
这取决于您如何管理您的应用程序。您可以使用某种IPC
机制将重新查询的参数传达给已在运行的进程。
您可以使用互斥锁停止运行的应用程序的多个副本。这里有一篇关于使用互斥锁的非常好的文章:http://sanity-free.org/143/csharp_dotnet_single_instance_application.html
至于将参数传递给已经运行的进程,您需要实现某种形式的 IPC 来通知正在运行的实例新参数。您可以使用许多解决方案,例如套接字,命名管道等。