允许两个应用程序实例运行

时间:2011-08-08 15:56:58

标签: c#

我理解如何使用互斥锁强制应用程序的单个实例,这就是我使用的。

我的一些用户要求我允许多个实例运行。我不想删除控制代码,因为我可以将其视为灾难的处方,因为多个实例可能会写入相同的文件,日志等等。

如果实例数量限制为两个,我或许可以处理。我目前的想法是允许第一个以某种形式的只读模式运行作为活动的一个和第二个。

那么如何将实例数量控制在不超过两个?

由于

2 个答案:

答案 0 :(得分:12)

听起来你想要一个命名系统Semaphore,其数量为2。

以下是一个例子:

class Program
{
    private const int MaxInstanceCount = 2;
    private static readonly Semaphore Semaphore = new Semaphore(MaxInstanceCount, MaxInstanceCount, "CanRunTwice");

    static void Main(string[] args)
    {            
        if (Semaphore.WaitOne(1000))
        {
            try
            {
                Console.WriteLine("Program is running");
                Console.ReadLine();
            }
            finally
            {
                Semaphore.Release();
            }
        }
        else
        {
            Console.WriteLine("I cannot run, too many instances are already running");
            Console.ReadLine();
        }
    }
}

Semaphore允许许多并发线程访问资源,当使用名称创建它时,它是一个操作系统范围的信号量,因此它很适合您的目的。

答案 1 :(得分:4)

bool IsFree = false;


Mutex mutex = new Mutex(true, "MutexValue1", out IsFree);

if(!IsFree)
    mutex = new Mutex(true, "MutexValue2", out IsFree);

if(!IsFree)
{
    //two instances are already running
}