C# 二重起動防止

static class Program
{
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(){

        Mutex mutex = null;

        try
        {
            mutex = new Mutex(false, Properties.Resources.STR_APP_NAME);

            if (mutex.WaitOne(0, false))
            {
                // アプリケーションの実行
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            else
            {
                MessageBox.Show("プログラムが二重に起動しています。", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop);
        }
        finally
        {
            if (mutex != null) { GC.KeepAlive(mutex); mutex.Close(); }
        }
    }
}

Tag: TIPS