Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мьютексы 
:(
    Опции темы
JS2
Дата 28.7.2010, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 25.3.2009

Репутация: нет
Всего: нет



Нуждаюсь в вашем совете. Для консольного приложения нужно запретить возможность повторного запуска. Сделал так:

Код

program Updater;

{$APPTYPE CONSOLE}

uses
 Windows, SysUtils;
var
 Mutex: THandle;
begin
 Mutex := CreateMutex(nil, False, PChar(ExtractFileName(ParamStr(0))));
 try
   if GetLastError <> ERROR_ALREADY_EXISTS then
   begin
     // ...
   end;
 finally
   CloseHandle(Mutex);
 end;
end.


Нашел пример в котором указатель на имя mutex-object задан как: 'E191BA0C41924AA9840243D5CAE346AF'. 
- Будет ли более правильным такой подход?
- Нужно ли делать CloseHandle, если функция CreateMutex возвращает 0. Может правильнее try..finally блок перенести в if?
PM MAIL   Вверх
rytmix
Дата 28.7.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 2.6.2009

Репутация: нет
Всего: нет



Если хочешь на Mutex`ах смотри(там правда код на C, но почитать объяснения полезно):
http://forum.codenet.ru/archive/index.php/t-16028.html

Есть еще варианты, но там модули подключать придется(не мое, взял на http://www.sql.ru/forum/actualthread.aspx?...9430&pg=2):

1) при запуске программа производит FindWindow(...), и если находит окно со своим названием, то дальше не инициализируется и закрывается.

2) при запуске производится CreateToolhelp32Snapshot(...) и Process32First(...)-Process32Next(...) в цикле, и если находим в памяти идентичный нашему szExeName, то выгружаемся. Если комбинировать оба способа, то выходит неплохо... Т.е. сочетание проверки по WindowCaption и ExeName позволяет нормально добиваться одиночества нашей программы.
PM MAIL   Вверх
~FoX~
Дата 28.7.2010, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Цитата(JS2 @  28.7.2010,  16:01 Найти цитируемый пост)
Нашел пример в котором указатель на имя mutex-object задан как: 'E191BA0C41924AA9840243D5CAE346AF'. 

Пофиг...нажми в редакторе кода Ctrl+Shoft+G получишь достаточно уникальный номер, его и вставляй...


Цитата(JS2 @  28.7.2010,  16:01 Найти цитируемый пост)
Нужно ли делать CloseHandle, если функция CreateMutex возвращает 0. Может правильнее try..finally блок перенести в if? 

Нет, не надо...Закроешь уже имеющийся мьютекс...

ИМХО так проще
Код

  hMutex := CreateMutex(nil, False, 'MyUniqueCoolMutex');
  if WaitForSingleObject(hMutex, 0) = wait_TimeOut then begin //если вышло время, значит объект уже существует...
        MessageBox(Application.Handle, PChar('Уже запущенно', PChar('Нифига'),  MB_ICONINFORMATION + MB_OK);
  end
  else begin
    //.......исполняем прогу....
  end;



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.