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