Jak uniemożliwić uruchomienie dwóch kopii programu ?
Czasami chcemy zabronić drugi raz na uruchamianie tego samego programu. Mozemy zastosowac rożne sztuczki :

- Pliki tymczasowe
- Rejestry
- Pliki konfiguracyjne *.ini

Metody te mają jedną zasadniczą wade... Co jeśli komputer się zawiesi i program nie zakończy swojego działania poprawnie (tj. nie usunie pliku tymczasowego, nie zmodyfikuje rejestru, nie dokona zmian w pliku ini) ... niestety nie uruchomimy programu, aż do momentu usunięcia niedogodności ręcznie!

Jest za to mechanizm który możemy wykorzystać i który nie zawiera tych niedogodności... są nimi Mutexy. Pomimo, że mutexy wykorzystywane są w innych celach ich mechanizm świetnie realizuje nasz problem.

W pliku Project1.cpp (domyślny plik projektu w C++Builderze) wystarczy dodać cztery linijki i problem rozwiązany.

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  try
  {
    Application->Initialize();
    Application->CreateForm(__classid(TForm1), &Form1);
 
    /*1*/  CreateMutex(NULL, TRUE, "CREATE_MUTEX_TEST");
    /*2*/  if (GetLastError() == ERROR_ALREADY_EXISTS)
    /*3*/    MessageBox(NULL, "Precz mi z oczu!", "Error" , MB_OK);
    /*4*/  else
                Application->Run();
 
  }
  catch (Exception &exception)
  {
      Application->ShowException(&exception);
  }
  return 0;
}


Autorem tekstu jest: Wojciech Bojewski
Materiał dodany przez użytkownika: _hador_