#はじめに
アプリケーションの多重起動を阻止したい場合はMutexクラスを使用すれば良い。
Mutexクラスを使うことで簡単に排他処理を作ることができる。
#サンプルプログラム
Program.cs
using System;
using System.Diagnostics;
class Program
{
private static System.Threading.Mutex _Mutex;
static void Main(string[] args)
{
if(MutexTest())
{
Console.WriteLine("True 多重起動です。");
}
else
{
Console.WriteLine("false 単体起動です。");
}
Console.ReadKey();
}
static bool MutexTest()
{
//ミューテックスクラスのインスタンス生成
_Mutex = new System.Threading.Mutex(false,"SubProcess");
//Mutexの所有権を要求
if (_Mutex.WaitOne(0, false) == false)
return true;
//プロセスを取得
string AppName = Process.GetCurrentProcess().MainModule.FileName;
var ps = Process.GetProcessesByName(AppName);
bool ProcessFlg = false;
foreach (var item in ps)
{
ProcessFlg = true;
break;
}
//起動済ならreturn
if (ProcessFlg)
return true;
return false;
}
}
#出力結果(単体でプログラムを起動の場合)
false 単体起動です。
#出力結果(同プログラムを複数起動の場合、2つ目以降)
True 多重起動です。
ちなみに、プログラム上でMutexクラスを解放する際はReleaseMutexメソッドを使用する。
_Mutex.ReleaseMutex();