アプリケーションの二重起動を防止する

メモ:  Category:vb

アプリケーションの二重起動を防止するには、いくつかの方法があります。ここでは、Mutexを使った方法とProcessNameを使った方法を記録します。

二重起動の防止をクラスライブラリに実装し開発を行う場合、ホスティングプロセス及びdevenv.exeが動作することで二重起動と判定されます。

ホスティングプロセスとは、アセンブリ.vshost.exeで実行されデバッグ作業を強化するためVisual Studio 2005で追加された機能です。この機能を使用しないようにするには、プロジェクトのプロパティからデバッグタブをクリックします。そのタブにある**「VisualStudio ホスティングプロセスを有効にする」**のチェックをはずすことでホスティングプロセスが停止します。

暫定ですが、AppDomain.CurrentDomain.FriendlyNameを使うことでも回避できそうです。

Mutexを使った二重起動の防止

アプリケーションの起動時にミューテックスオブジェクトが存在するかどうか確認します。System.Threading.Mutex(False, "UniqueName")でユニークな識別名を設定しhMutex.WaitOne(0, False)で、すでに起動中であるかを確認します。

GC.KeepAliveは、GCによってミューテックスオブジェクトが破棄されてしまうのを防ぐため指定します。

Dim hMutex As New System.Threading.Mutex(False, "ユニークな識別名")

If hMutex.WaitOne(0, False) = True Then
    GC.KeepAlive(hMutex)
'    Application.Run(New Form1)
Else
    Application.Exit()
End If

プロセス名をを使った二重起動の防止

GetCurrentProcess.ProcessNameで、プロセス名を取得しProcess.GetProcessesByNameで同じ実行可能ファイルを実行しているプロセス型の配列を取得します。この配列からすでに起動中であるかを確認します。

If UBound(Diagnostics.Process.GetProcessesByName( _
    Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
    ' すでに起動中
    Application.Exit()
End If

bluenote by BBB