インストール先別に防止する
同一アプリケーションのインスタンスであってもインストール先が異なれば多重起動を許可したいという場合があります。それに対応するには、インストール先の間で異なる名前をミューテックスオブジェクトに付けるようにします。具体的には、インストール先のディレクトリパスから算出したハッシュ値をミューテックスの名前に追加するという方法が考えられます。例えば、次のようにします。
//---------------------------------------------------------------------------
// Project1.cpp
//---------------------------------------------------------------------------
namespace {
// 多重起動防止用ミューテックスの名前
// 注: CalculateSha256Hashは、この例のために設けた仮の関数
const AnsiString AppInstanceLockName =
"ExampleAuthor.ExampleApplication.AppInstanceLock" +
CalculateSha256Hash(AnsiUpperCaseFileName(ExtractFileDir(Application->ExeName)));
} // 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;
}
//---------------------------------------------------------------------------
最終更新: 2008-11-10
戻る