ほかのexeファイルの2重起動防止

ProcesのIDを利用する

  1. 考え方
    ・該当exeファイルのプロセスを取得する
    ・取得したプロセスから当該システムから起動したプロセスIDを取得する
    ・合致するIDであればエラーとする
    ・画面を閉じるときに当該システムから起動したプロセス(ID)であれば一緒に閉じる

  2. 実装

Public Class process

    //変数
    Private p As System.Diagnostics.Process
    Private pId As Integer = Nothing

    //クローズ
    Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click

        //当該システムで開いたメモ帳を閉じる
        If CheckProessId() Then
            p.CloseMainWindow()
            p.Close()
            p.Dispose()
        End If

        Me.Close()
    End Sub

    //プロセス
    Private Sub btnCallAnoterProgram_Click(sender As Object, e As EventArgs) Handles btnCallAnoterProgram.Click
        //Processを利用して該当のアプリが起動中かチェックする
        If CheckProessId() Then
            MsgBox("メモ帳は既に起動済です。" & vbCrLf & "メモ帳を閉じてから再度ボタンをクリックしてください。",
                   MsgBoxStyle.Exclamation,
                   "警告")
            Exit Sub
        End If

        //メモ帳の起動
        p = System.Diagnostics.Process.Start("notepad.exe")
        pId = p.Id

    End Sub

    //ProcessIDをもとに当該システムで起動したアプリかチェックする
    //True : 起動済 / Flase : 未起動
    Private Function CheckProessId() As Boolean
        CheckProessId = False

        Dim pCheck As System.Diagnostics.Process
        Dim ps As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("notepad")

        //配列から1つずつ取り出す
        For Each pCheck In ps
            If pCheck.Id = pId Then
                Return True
            End If
        Next pCheck
    End Function
End Class