アプリケーション別に防止する

アプリケーションの多重起動を防止するには、ミューテックスを使います。アプリケーションの起動直後に、ミューテックスオブジェクトの作成と所有権の要求を同時に行うようにします。もし所有権を得られたら、単一起動にあたるので処理を続行します。得られなかったら、多重起動にあたるのでアプリケーションを終了します。例えば、次のようにします。
//---------------------------------------------------------------------------
// Project1.cpp
//---------------------------------------------------------------------------
namespace {
// 多重起動防止用ミューテックスの名前
const AnsiString AppInstanceLockName = "ExampleAuthor.ExampleApplication.AppInstanceLock";
} // End of namespace
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                // 多重起動を防止する
                ::SetLastError(NO_ERROR);
                HANDLE instanceLock = ::CreateMutex(NULL, true, AppInstanceLockName.c_str());
                if(instanceLock == NULL || ::GetLastError() != NO_ERROR) {
                        return 0;
                }

                Application->Initialize();
                Application->CreateForm(__classid(TForm1), &Form1);
                Application->Run();
        }
        catch (Exception &exception)
        {
                // ...
        }
        catch (...)
        {
                // ...
        }
        return 0;
}
//---------------------------------------------------------------------------
CreateMutexで作成したミューテックスオブジェクトは、アプリケーションが終了する際に、システムによって開放されます。このため、アプリケーション側でハンドルを開放する必要は特にありません。
 
最終更新: 2008-11-10

戻る