Windowsアプリで多重起動を禁止する(GUID編)

2017 年 12 月 18 日 by Dr.K

少し前にあった話ですが、VB.NETでWindowsアプリケーションを2つ作成し実行してみると、同時に起動できない、という問題がありました。多重起動の設定はおこなっていたのですが、別のアプリケーションなのになぜ同時に起動できないのでしょうか?

システム開発をしていると、多重起動を禁止したいという要件は何度かあったりするのですが、方法としてはいろいろなやり方が考えられます。データベースで端末ごとの起動を管理したり、起動中に一時フォルダなどにコントロール用のファイルを作成したり、プロセスの一覧のチェックやMutexを使った方法などが挙げられます。

そんな中VB.NETのWindowsフォームアプリケーションでは、プロジェクトの設定のみで簡単に多重起動を禁止することができます。
プロジェクトの「プロパティ」を開き、「アプリケーション」タブの設定「単一インスタンスのアプリケーションを作成する」にチェックを入れるだけで設定は完了です。
単一インスタンスのアプリケーションを作成する

これだけで、後から同じアプリケーションを起動しようとしても、先に起動していたアプリケーションがアクティブになるだけで、多重起動がおこなえないようになります。

さて、冒頭に挙げた、別のアプリケーションなのになぜ同時に起動できなかったのか、という問題についてですが、実はこの多重起動を禁止する方法では、GUIDをチェックすることでおこなわれているようです。

GUIDはマイクロソフトなどがプログラム識別したりする際に、世界中で重複しないように設定している識別子のようなものになります。(グローバル一意識別子と呼ばれています) 今回の問題は、プロジェクトをコピーして作成していたため、GUIDに同じ値が設定され、同じアプリケーションが起動したと認識されたために発生したと考えられます。

VB.NETでWindowsアプリケーションを新規に作成した際、GUIDは自動的に作成・設定されています。GUIDを確認するには、上記の画面から、「アセンブリ情報」の画面を開くと表示されます。

GUID

GUIDを再度設定するためには、自分で任意に書き換えることもできますが、Visual StudioにはGUIDを自動作成するためのツールが用意されています。メニューの「ツール」 > 「GUIDの作成」を開くと、GUIDを作成するための画面が表示されます。

GUIDの作成

「コピー」ボタンを押せば、「結果」欄に表示されている内容がクリップボード上にコピーされます。

 

今回はWindowsアプリケーション(VB.NET)で多重起動を禁止する方法、加えてGUIDの設定について記載しました。実際にお客様が利用することを考えると、「多重起動はできません」などのメッセージを表示したりともう一手必要になることが多いと思いますが、そのあたりについてはまた機会があれば記事にしてみようかと考えています。

TrackBack