今回は、WPFアプリで2重起動を防ぐ方法を忘れないために書いておく。
目的
WPFアプリで2重起動を防ぐ。
実装
アプリによっては、2重起動されては困るものもあると思うので(今回まさに直面した)2重起動しないようにしてみた。
手を加えるのは、App.xaml、App.xaml.csの2つ。
App.xamlでStartup="Application_Startup" Exit="Application_Exit"を追加。
<Application x:Class="applicationname.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:applicationname" Startup="Application_Startup" Exit="Application_Exit"> <Application.Resources> </Application.Resources> </Application>
次にApp.xaml.csでApplication_StartupとApplication_Exitを実装。
public partial class App : Application { private void Application_Exit(object sender, ExitEventArgs e) { Mutex mutex_; if (Mutex.TryOpenExisting("テストアプリ", out mutex_)) { mutex_.ReleaseMutex(); mutex_.Dispose(); } } private void Application_Startup(object sender, StartupEventArgs e) { Mutex mutex_ = new Mutex(false, "テストアプリ"); try { if (!mutex_.WaitOne(0, false)) { MessageBox.Show("テストアプリはすでに起動しています。", "テストアプリ", MessageBoxButton.OK, MessageBoxImage.Exclamation); this.Shutdown(); } var mainWindow = new MainWindow(); mainWindow.Show(); } finally { mutex_.Dispose(); } } }
Mutexはきちんと解放しないと、次に起動ができなくなるので注意!
上のコードを入れておけば、2重起動を防ぐことができる。
メッセージボックスの表示は自由だけど。
めでたし、めでたし。
変更履歴
5/17 コード修正。