アプリの多重起動防止
環境は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; }