2004.10.06

多重起動を防止

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

トラックバック

この一覧は、次のエントリーを参照しています: 多重起動を防止:

» VB.Netでの多重起動防止 送信元 ITプロフェッショナル部
.NetのWindowフォームで多重起動を防止する方法といえば、 専ら Mute... [詳しくはこちら]

コメント (2)

この防止策が有効なのは、誰と誰の間なのかあると良いかも。
Q1.ログインユーザー内のみ
Q2.同じマシンに同時ログインしている別アカウントも含む
(ターミナルサービス。他にも XP-HOMEエディションではログオンしたままユーザー切り替えできる)
Q3.まさかアプリケーション本体(ネットワーク上どのマシンからも)

とりあえずQ1ですね。
Q2、Q3は未検証です。
Homeエディションのユーザー切り替えは、VBのApp.PrevInstance では検出できないようですね。
参考:http://www.microsoft.com/japan/technet/prodtechnol/winxppro/deploy/exappmigratoxp.mspx

上記サイトにMutexでも同様とあるので、やはり無理なのではないでしょうか?

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
nakamura