Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как не допустить запуска второй копии программы.

6.0K
14 августа 2007 года
Tramp
71 / / 25.07.2006
Как не допустить запуска второй копии программы.
Подскажите пожалуйста, я думаю задачка не сложная
7.3K
14 августа 2007 года
H010d Freeze
143 / / 08.08.2006
Например, так:
Код:
//Функция, проверяющая, запущено ли приложение
// ПАРАМЕТРЫ:
//  AppName - имя приложения
// ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
//  -- 0 - Ok (приложение не запущено)
//  -- 1 - Ошибка выделения памяти
//  -- 2 - Приложение запущено

int CanStartApplication(char* AppName)
{
  HANDLE hUniqueMapping;
  hUniqueMapping = CreateFileMapping( (HANDLE)0xFFFFFFFF,
                                      NULL,
                                      PAGE_READONLY,
                                      0,
                                      32,
                                      AppName);
  if ( !hUniqueMapping )
    return 1;
  else
    if ( GetLastError() == ERROR_ALREADY_EXISTS )
      return 2;
  return 0;
}
6.0K
14 августа 2007 года
Tramp
71 / / 25.07.2006
Спасибо! Всё работает.
6.0K
14 августа 2007 года
Tramp
71 / / 25.07.2006
Вот здесь: http://cbuilder.ru/index.php?action=forum
мне подсказали:
Цитата:
А если у пользователя отключен файл подкачки, то прогу запустить не удастся.


Есть ещё вариант как не допустить запуска второй копии программы?

6.0K
14 августа 2007 года
Tramp
71 / / 25.07.2006
ещё один вариант нашёлся:
Код:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR , int)
{
        try
        {
                           // Пытаемся открыть мьютекс.
        char *c = AnsiLastChar(ExtractFileName(Application->ExeName));
        HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, c);
        if(!hMutex)
        {
            hMutex = CreateMutex(0, 0, c);
        }
        else
        {
            ShowMessage("Приложение уже запущенно.");
            return 0;
        }

                  Application->Initialize();
                  Application->CreateForm(__classid(TMain), &Main);
                  Application->Run();

        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}
7.3K
14 августа 2007 года
H010d Freeze
143 / / 08.08.2006
Можно еще FindWindow попробовать
16K
14 августа 2007 года
Zbyszek
118 / / 08.08.2007
Можно ещё и GlobalFindAtom, но мне больше нравится Mutex.
92
15 августа 2007 года
Тень Пса
2.2K / / 19.10.2006
Mutex работает безотказно, ваще =) сам пользую. +1
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог