超簡単かつエレガントにアプリケーションの多重起動を防止する方法を記載します。

多重起動の禁止について

 次の項目から以下3つの方法を簡単に記載していますが、
 最後の「Visual Studioの機能を使う」だけ参照してください。
 書いておいて言うのもなんですが、それ以外の方法を考えること自体時間の無駄です。
 ・「プロセス名で排他する」
 ・「MUTEXを使う」
 ・「Visual Studioの機能を使う」
 

プロセス名で排他する

 自分と同じプロセス名のアプリが実行されていないかチェックする方法です。
 この方法は楽ではありますが不完全すぎます。
 Win32APIのFindWindowでやるのとあまりかわりがありません。

 
    Dim myProcessName As String = System.Diagnostics.Process.GetCurrentProcess.ProcessName
    If System.Diagnostics.Process.GetProcessesByName(myProcessName).Length > 0 Then
        MessageBox.Show("多重起動検出")
        Me.Close()
    End If

 

MUTEXを使う

 MUTEXという、アクセス排他、同期制御機能を使用する方法です。
 しちめんどくさく、以下理由により正直やってられません。
 (とはいえまじめに開発する場合は使えます)

 1.スタートアップをSub Mainとしなければならない。
   なぜならMutexを開放するのは同期ブロック内でしか行えないから。
   よってForm_Closedなどでは開放できない。

 2.Mutexのやばさを知らずに気軽に使うのは怖すぎる。
   こんなものを気軽なアプリを作る場合に使いたくない。

   Dim myMutex As New System.Threading.MutexFalseSystem.Process.GetCurrentProcess.ProcessName)
   If myMutex.WaitOne(0False= False Then
        MessageBox.Show("多重起動検出")
        myMutex.Close()
        Me.Close()
   End If

 

Visual Studioの機能を使う

 実はVisual Studioの設定だけで多重起動を禁止できます。
 ただしVisual Studio 2005以降でしか使えません。画像は2008 Professionalです。
 設定方法は以下。
 
 1.[ソリューションエクスプローラ] から プロジェクト名を右クリックして、[プロパティ] を選択。
   ファイル 42-1.png

 2.[単一インスタンスのアプリケーションを作成する(M)] にチェックを入れる。
   ファイル 42-2.png

 3.完了。ちょーかんたん。
   ただし、Visual Studioからの起動(RUN)時は、他にアプリを実行していても起動できる模様。

コメント

  • コメントはまだありません。

コメントを投稿する

コメントを投稿する場合は以下に注意してください。

・記事に関係する内容であること
・特別な理由がない限り「全体公開」であること

これさえ守っていただければどんな内容でも投稿可能です。
皆様の質問やコメントは他の方の問題解決に繋がりますのでご協力ください。

コメント投稿フォーム
名前
メール
URL
コメント
閲覧制限

コメントを投稿するには、以下の問題に答えてください。
問題:「LEDの和名を漢字二文字+カタカナ五文字で入力してください」