アプリケーションを開発していて、多重起動を禁止するのはよくあることです。
.NETでは、簡単に禁止処理を行うことができます。
使用するクラスは、
System.Threading.Mutex
です。
Moniterがプロセス内での排他制御を行えるのに対して
Mutexの方は、プロセスをまたがって排他制御ができます。
以下のメソッドを使用します。
new Mutex(bool, string) Mutex.WaitOne(TimeSpan, bool) Mutex.ReleaseMutex()
以下、サンプルです。
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using System.Drawing; using System.Windows.Forms; using System.Threading; namespace Gsf.Samples.WinForms{ ////// System.Threading.Mutexのサンプルです。 /// ////// Mutexクラスを用いて、多重起動を禁止します。 /// public class MutexSample : Form{ public MutexSample(){ InitializeComponent(); } protected void InitializeComponent(){ Text = typeof(MutexSample).FullName; Size = new Size(400, 100); } static void Main(){ // // Mutexを生成. // // 初期所有権は付与せず(第一引数)、名前はアプリ名と同じにする // Mutex m = new Mutex(false, typeof(MutexSample).FullName); // // 所有権を要求 // if(!m.WaitOne(TimeSpan.Zero, false)){ // // 所有権を取得できなかった場合は、既に同名のプロセスが起動しているとみなす // MessageBox.Show("多重起動はできません。"); return; } Application.Run(new MutexSample()); // // 所有権をリリース // m.ReleaseMutex(); } } }
上記のコードをコンパイルして実行すると
一つ目のアプリケーションは起動しますが、2つ目を起動すると
既に同じ名前のMutexが獲得されているので起動せず、メッセージが表示されます。