이중 실행 방지 방법은 매우 널리 알려졌습니다.
빌더에서는 아래와 같이 프로젝트 메인 함수에 뮤텍스를 이용한 중복 방지 방법이
널리 쓰입니다.
아래는 제가 예제로 제작한 프로그램의 프로젝트명.cpp 파일의 소스입니다.
소스에서
hMutex = CreateMutex(NULL, false, "AnyApp_KimTaeSung");
이 코드가 핵심적입니다. "AnyApp_KimTaeSung" 라는 명칭을 어플마다 다르게 주면 됩니다.
/*
거시기 어플리케이션
*/
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Main.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
// 뮤텍스를 이용한 중복실행 방지. : 가장확실한 방법이다.
HANDLE hMutex = NULL;
hMutex = CreateMutex(NULL, false, "AnyApp_KimTaeSung");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
ShowMessage("이미 실행되어 있습니다.");
return 0;
}
try
{
Application->Initialize();
Application->Title = "거시기 어플리케이션";
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
if (hMutex) // 뮤텍스 종료
CloseHandle(hMutex);
return 0;
}
|