ぺやろぐ

ぺやろぐ

焼きそばよりチャーハンが好き。

〔C#〕〔WPF〕アプリの2重起動を防ぐ

スポンサーリンク



今回は、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 コード修正。