C++로 짠다면, 다음과 같은 식으로 구현하면 되겠죠.
HANDLE gMutexHandle = NULL;
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
try
{
gMutexHandle = CreateMutexW(NULL, true, L"Global/Application/Mutex");
if( gMutexHandle && !GetLastError() ) {
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
else {
PROCESS_INFORMATION pi;
CreateProcessW(NULL, Application->ExeName.w_str(), NULL, NULL, true, 0, NULL, NULL, NULL, &pi);
Application->Terminate();
}
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
}
__finally {
if( gMutexHandle ) {
CloseHandle( gMutexHandle );
OutputDebugStringW(L"Application Terminated...");
}
}
return 0;
}
위와 같은 식으로 구현하면 기존의 프로세스는 종료되고, 새로운 프로세스가 생성되게 됩니다.
델파이로 구현하는 코드는 생략 합니다.
|