Windowsアプリケーションの多重起動を防止する方法はいろいろとあるようですが、
一番最近採用したのはMutexを使用した以下の方法です。
Sub Main()
Dim oMt As System.Threading.Mutex
oMt = New System.threading.Mutex(False, "TestForm")
If oMt.WaitOne(0, False) Then
Dim f1 As New Form1
f1.ShowDialog()
oMt.ReleaseMutex()
Else
MessageBox.Show("既に起動しています。")
End If
oMt.Close()
End Sub
コメント (2)
この防止策が有効なのは、誰と誰の間なのかあると良いかも。
Q1.ログインユーザー内のみ
Q2.同じマシンに同時ログインしている別アカウントも含む
(ターミナルサービス。他にも XP-HOMEエディションではログオンしたままユーザー切り替えできる)
Q3.まさかアプリケーション本体(ネットワーク上どのマシンからも)
投稿者: 市川 | 2004年10月 6日 20:53
とりあえずQ1ですね。
Q2、Q3は未検証です。
Homeエディションのユーザー切り替えは、VBのApp.PrevInstance では検出できないようですね。
参考:http://www.microsoft.com/japan/technet/prodtechnol/winxppro/deploy/exappmigratoxp.mspx
上記サイトにMutexでも同様とあるので、やはり無理なのではないでしょうか?
投稿者: naka | 2004年10月 6日 21:45