C#のプログラムで多重起動を抑制する

C#のプログラムをつくるとき、多重起動を抑制したい場合があります。
そんなときに使えるのがMutexです。

下記のようなプログラムを実行してみます。

public static void Main()
{
    using (Mutex mutex = new Mutex(false, "MutexSample"))
    {
        if (mutex.WaitOne(0, false))
        {
            Console.WriteLine("OK");
            Console.ReadLine();
        } 
        else
        {
            Console.WriteLine("NG");
            Console.ReadLine();
        }
    }
}

Mutexのインスタンスを生成して、Mutexを取得できればOK、できなければNGを出力し、
そこで入力があるまで停止しています。
最初起動するとOKが出力されるはずです。何かキーを押すとプログラムが終了します。
再度起動してもOKが出力されます。
ここで、キーを押さずに起動中のままにしておき、新たに起動してみます。
するとふたつめのほうではNGとなるかと思います。
ひとつめのほうで取得したMutexを解放していないため、ふたつめのほうでは取得に失敗したためです。
このように、Mutexを使うことで多重起動を判定することができます。

スポンサーリンク