2

可能重复:
创建单实例应用程序的正确方法是什么?
如何实现每个机器应用程序的单个实例?

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

static class Program
{

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

该程序每天由另一个应用程序执行数次。

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

4

2 回答 2

2

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

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

于 2013-01-28T10:38:08.337 回答
2

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

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

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

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

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

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

于 2013-01-28T10:41:02.947 回答