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)が出るようになるので、実際に使用する場合にはお手当てする必要がありそうです。