MUTEXによるプロセス間の排他制御。MUTEX使うの10年ぶりだ…ということでメモ。
Sub Main()
    Dim _mutex As System.Threading.Mutex
    ' 取得
    _mutex = New System.Threading.Mutex(False, "LockName")
    _mutex.WaitOne()
    ' 処理
    MsgBox("処理中")
    ' 解放
    _mutex.ReleaseMutex()
    _mutex.Close()
End Sub
今回初めて知りましたが、mutexはセッション毎にできるらしい、つまり、リモートデスクトップとローカルとでは排他できないとのこと。実際に確認してみたら、リモートデスクトップとローカルとでそれぞれ取得できました…
セッション共通でmutexを使いたい場合は、"Global"を先頭にいれたらよいらしい。しかしmutexを作成する(New)の段階で例外(System.UnauthorizedAccessException)が出るようになるので、実際に使用する場合にはお手当てする必要がありそうです。