🤖
【忘備録】WPF二重起動の防止
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