🤖

【忘備録】WPF二重起動の防止

2024/10/16に公開

WPFアプリケーションで二重起動を防止することは、ミューテックス(Mutex)を使用して実現できます。以下は、サンプルコードです。

App.xaml.cs
using System;
using System.Threading;
using System.Windows;

namespace WpfApp
{
    public partial class App : Application
    {
        private static Mutex _mutex;
        protected override void OnStartup(StartupEventArgs e)
        {
            // ミューテックスの名前を指定します。ユニークな名前を設定してください。
            bool isNewInstance;
            _mutex = new Mutex(true, "UniqueAppName_Mutex", out isNewInstance);

            if (!isNewInstance)
            {
                // すでに起動している場合、メッセージボックスを表示してアプリケーションを終了
                MessageBox.Show("アプリケーションは既に起動しています。", "二重起動禁止", MessageBoxButton.OK, MessageBoxImage.Warning);
                Application.Current.Shutdown();
            }

            base.OnStartup(e);
        }

        protected override void OnExit(ExitEventArgs e)
        {
            // ミューテックスを解放
            _mutex?.ReleaseMutex();
            base.OnExit(e);
        }
    }
}
  • Mutexを使って、アプリケーションが既に起動しているかどうかを確認します。
  • ミューテックスの名前はユニークな文字列にします。同じ名前で他のアプリケーションと競合しないようにするためです。
  • isNewInstance が false の場合、既にアプリケーションが実行中なので、メッセージボックスを表示して、Application.Current.Shutdown(); でアプリケーションを終了します。
  • アプリケーションが終了する際に、_mutex.ReleaseMutex() でミューテックスを解放します。

これで、二重起動を防止し、2つ目のアプリケーションが起動された場合にはメッセージを表示して終了することができます。

Discussion