アプリケーションの2重起動(複数起動)を防止する
2014/04/10
文書番号:20384
WPF アプリケーションでアプリケーションの2重起動(複数起動)をさせない方法です。
基本的にはWindows Forms アプリケーションと同じでMutexを使用して2重起動をチェックします。
動作確認環境:Visua Studio 2010(vb) .NET Framework 4.0
【設定手順】
- WPFアプリケーションを作成すると「Applicaion.xaml」というファイルができています。
このファイルのソースコードを開きます。
「(Application イベント)」を選択して「Startup」と「Exit」を作成します。
クリックで拡大
- ソースは以下のようになります。
'多重起動チェックのためのミューテックス定義 Private m As New System.Threading.Mutex(False, "ApplicationName") '起動するウインドウ Private w As MainWindow = Nothing Private Sub Application_Startup(sender As System.Object, e As System.Windows.StartupEventArgs) 'ミューテックスの所有権を要求 If m.WaitOne(0, False) = False Then '既に起動していると判断し終了する MessageBox.Show("既に起動しています。") 'Mutexを破棄 m.Close() m = Nothing 'アプリケーション終了 Me.Shutdown() Else 'メイン画面を手動で初期化する w = New MainWindow 'メイン画面を起動 Call w.Show() End If End Sub Private Sub Application_Exit(sender As System.Object, e As System.Windows.ExitEventArgs) 'ミューテックスの存在確認 If m IsNot Nothing Then '存在する場合は破棄する m.ReleaseMutex() m.Close() m = Nothing End If End Sub
- 次に「Applicaion.xaml」を開きます。
「Startup」と「Exit」は上記の方法で定義すると特に記載がなくても呼ばれるようです。
実行してみて「Startup」が呼ばれないようであれば次のように書きます。
クリックで拡大
この次の行に「StartupUri」の記載がありますが、これを削除します。
StartupUriの指定によってMainWindowを起動するようにしていると、Startupの中で2重起動を検知してShutdownをした際にもMainWindowのコンストラクタが実行されるようです。
参考情報
http://blog.syo-ko.com/?eid=1861#sequel
- 「Application.xaml」のソースは以下のようになります。
4行目が追加した行です。これがなくても呼ばれるようになっていれば書かなくていいです。
その次の行にあった「StartupUri」の記述は削除します。
<Application x:Class="Application" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Startup="Application_Startup" Exit="Application_Exit"> <Application.Resources> </Application.Resources> </Application>
.NET アプリケーション (WPF/Windows フォーム) で多重起動を禁止し、単一のプロセスで動作させる http://code.msdn.microsoft.com/windowsdesktop/NET-WPFWindows-20c6a2a0 |