アプリケーションの複数起動を禁止する(Mutex版)

注意:
この文書は以前「.NETでいきまっしょい!」で公開していたものですが、公開以降メンテナンスされていません。 今や古い情報となった内容が記載されている場合があるのでご注意ください。
Mutexの排他アクセス機能を利用することで、アプリケーションの多重起動を阻止できる。 既にMutexが取得されていないかどうかでアプリケーションが既に起動しているかどうかを判定する。 なお、Mutexコンストラクタの二つ目の引き数(ここではSystem.Windows.Forms.Application.ProductName)は適当な文字列に変えることが出来る。
VB.NET
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
Public Class Test

    Public Shared Sub Main()

        ' Mutexのインスタンスを生成する
        Dim mutex As New System.Threading.Mutex(False, System.Windows.Forms.Application.ProductName)

        ' 既にMutexが取得されていないか確認する
        If Not mutex.WaitOne(0, False) Then

            ' 既に取得されている場合
            Console.WriteLine("アプリケーションは既に起動しています。")

            ' mutexを解放
            mutex.Close()

            ' ここまでで処理を終了する
            Return

        End If

        ' 複数起動されていない場合は、通常の処理を行う

        ' mutexを解放
        mutex.ReleaseMutex()

    End Sub

End Class
C#
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
public class Test
{
    public static void Main()
    {
        // Mutexのインスタンスを生成する
        System.Threading.Mutex mutex = new System.Threading.Mutex( false, System.Windows.Forms.Application.ProductName);

        // 既にMutexが取得されていないか確認する
        if ( ! mutex.WaitOne( 0 , false ) ) 
        {
            // 既に取得されている場合
            Console.WriteLine( "アプリケーションは既に起動しています。" );

            // mutexを解放
            mutex.Close();

            // ここまでで処理を終了する
            return;
        }

        // 複数起動されていない場合は、通常の処理を行う

        // mutexを解放
        mutex.ReleaseMutex();
    }
}