VB.NET二重起動を禁止する

スポンサーリンク

二重起動 (多重起動) を防止するのには、いくつかの方法が考えられます。ここで紹介する方法は、同名のプロセスが起動していないかどうかをチェックする方法です。これは、旧 VB での App.PrevInstance プロパティを調べる方法と似ています。

そのため、実行ファイル名を変更されると別プロセス扱いになる という弱点が同様にあり確実とは言えません。(App.PrevInstance は 実行ファイルまでのパス + 実行ファイル名 で判断していました)

確実に二重起動を防止したい場合は 二重起動を確実に禁止する をご覧ください。

サンプルコード

以下にサンプルコードを示します。

VB.NET 全般
''' ---------------------------------------------------------------------------
''' <summary>
'''    同名のプロセスが起動しているかどうかを示す値を返します。</summary>
''' <returns>
'''    同名のプロセスが起動中の場合は True。それ以外は False。</returns>
''' ---------------------------------------------------------------------------
Public Shared Function PrevInstance() As Boolean
    ' このアプリケーションのプロセス名を取得
    Dim stThisProcess As String = System.Diagnostics.Process.GetCurrentProcess().ProcessName

    ' 同名のプロセスが他に存在する場合は、既に起動していると判断する
    If System.Diagnostics.Process.GetProcessesByName(stThisProcess).Length > 1 Then
        Return True
    End If

    ' 存在しない場合は False を返す
    Return False
End Function

使用例は以下のようになります。

VB.NET 全般
<STAThread()> _
Protected Shared Sub Main()
    ' 同名のプロセスが起動していない時は起動する
    If PrevInstance() = False Then
        Application.Run(New Form1())

    ' 既に起動中である旨を表示 (推奨しません)
    'Else
    '    MessageBox.Show("既に起動しています")
    End If
End Sub

関連するリファレンス

準備中です。

スポンサーリンク