アプリの二重起動防止


ミューテックスに識別名(アプリ名)をつけて作成し、そのミューテックスを取得できる場合のみアプリを起動する。

他のスレッドが実行中であればWaitOneメソッドは待ち状態となる。
タイムアウトを0にしているので、即座にfalseが返る。

C#


// アプリケーションの二重起動防止のため、ミューテックスを生成
System.Threading.Mutex hMutex = new System.Threading.Mutex(false, Application.ProductName);

// ミューテックスを所有できる場合のみアプリケーションを起動する
if (hMutex.WaitOne(0, false)) {
Application.Run(new Apl());
}

hMutex.Close();

C++

BOOL Test::InitInstancd() {
HANDLE hMutex = CreateMutex(NULL, TRUE, "Test");
DWORD err = GetLastError();

// すでにアプリが起動中だとERROR_ALREADY_EXISTS(183)となる
if (err) {
if (hMutex != NULL) {
ReleaseMutex(hMutex);
CloseHandle(hMutex);
hMutex = NULL;
}
return FALSE;
}
return TRUE;
}