アプリの多重起動防止


環境はBorland C++ Builder 5です。
超初心者な内容ですが、とりあえずメモっときます。
正しいかどうかは保証しないので
曖昧な表現で書いていますw


アプリの多重起動を防ぐにはOpenMutexという関数を使うらしい。
オブジェクトの中身はこんな感じらしい。

HANDLE OpenMutex(
  DWORD dwDesiredAccess,  // アクセス権
  BOOL bInheritHandle,    // 継承オプション
  LPCTSTR lpName          // オブジェクトの名前
);


パラメータは以下のように指定するのか、なるほど。

・アクセス権
SYNCHRONIZE      :所有権の取得や開放を行う。(NT/2Kのみ)
MUTEX_ALL_ACCESS :可能な全ての操作を行う。
とりあえずMUTEX_ALL_ACCESSを指定しとこう。

・継承オプション
取得結果のハンドルが継承可能か否か、と言われてもなぁ。
とりあえずここではfalseを指定。

・オブジェクトの名前
次回この関数を呼び出した時にここの名前を見て
多重起動できないように制御してるのかな。


実際のコードはこんな感じかな。

HANDLE mx;

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  //二重起動防止
  mx = OpenMutex(MUTEX_ALL_ACCESS,
                 false,
                 "アプリのタイトル");
   
  if( GetLastError() )
  {
    // エラーです
    return 1;
  }

  try
  {
    // アプリ起動や初期化処理など
  }
  catch (Exception &exception)
  {
    // エラー処理
    Application->ShowException(&exception);
  }

  // Mutexの解放
  ReleaseMutex( mx );
  return 0;
}