使用已经运行的应用程序实例

时间:2013-01-28 10:35:17

标签: c# winforms

  

可能重复:
  What is the correct way to create a single instance application?
  How to implement single instance per machine application?

我有一个Winform-app,它将一个参数作为参数。

static class Program
{

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

该程序由其他应用程序每天执行几次。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

  

是否可以检查我的程序是否已在运行

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

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

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

  

我可以使用带有最新参数的运行实例吗?

这取决于您如何管理您的应用。您可以使用某种IPC机制将已重新参数传递给已经运行的进程。