Главная / FAQ по Builder'у / 32 Как не позволить пользователю...

32 Как не позволить пользователю запустить вторую копию программы?


1-й способ

Я просто линкую к программе модуль с кодом
#include <vcl.h> // не знаю где этот Mutex обитает :)

class TOnlyOneProgram {
  HANDLE handle;
public:
  TOnlyOneProgram(){
    // create mutex with the specific name
    // (подставляется уникальное имя (например по Ctrl-Shift-G))
    handle = CreateMutex(0,true,"FCD17B00-2DF6-11D6-A722-00105A29D4ED");
    // terminate program if mutex with the same name exists in the system
    if(GetLastError()==ERROR_ALREADY_EXISTS){
      exit(EXIT_SUCCESS);
      // on exit, object is not created, so destructor is not called
      }
    }
 ~TOnlyOneProgram(){
    // release mutex on exit
   ReleaseMutex(handle);
   }
  } OnlyProgramMutex;
Sergiy Kanilo

2-й способ

Пишешь в главном юните программы:
 bool RunMe = true;
 HWND HMutex = CreateMutex(NULL,true,"Name");
 if (GetLastError()!=0) RunMe = false;
 ReleaseMutex(hMutex);
 if (RunMe) {
// здесь пишешь, что должно выполняться, если прога запускается первый раз
 } else {
// если уже не первый..
 }
Вместо "Name" - практически любое название - такое, которое бы по возможности никто другой бы не в силах был придумать :))
Vitaly Slobodskoy 2:5015/128.22
Mihail Kabanov 2:5020/1721

Предыдущий вопрос   |  Список вопросов   |   Следующий вопрос

источник      На главную      by jenyok
Copyright © 2003 JTSOFT
Сайт управляется системой uCoz