Restrict multiple instances of an application

Lloyd Powell picture Lloyd Powell · Jul 30, 2009 · Viewed 11.9k times · Source

Okay, so i've created my c# application, created an installer for it and have it working installed on my machine.

The problem is, when the user opens the application exe twice, there will be two instances of the application running. I only ever want one instance of the application to be running at any time, how do I go about doing this?

Thanks for your help,

Answer

Anton Gogolev picture Anton Gogolev · Jul 30, 2009

The common technique for this is to create a named Mutex and check for its presence on application start.

See this or this.

Code from DDJ:

class App : Form
{
    Mutex mutex;

    App()
    {
        Text = "Single Instance!";
        mutex = new Mutex(false, "SINGLE_INSTANCE_MUTEX");
        if (!mutex.WaitOne(0, false)) 
        {
            mutex.Close();
            mutex = null;
        }
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
            mutex.ReleaseMutex();
        base.Dispose(disposing);
    }

    static void Main()
    {
        App app = new App();
        if (app.mutex != null) Application.Run(app);
        else MessageBox.Show("Instance already running");
    }
}