| 
| 
 | Вопрос # 1 439/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Такой вопрос: нужно запретить запуск копии программы. Нашел много способов, но нужен не громоздкий и, главное, рабочий! Помогите плиз! ;)
 
|  |   Вопрос задал: Hi-tek (статус: 1-ый класс)Вопрос отправлен: 22 марта 2008, 19:28
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: min@y™ Метод с созданием мьютекса подойдёт? См. приложение. Приложение:Переключить в обычный режим  program p1439; uses Windows, Messages, ...; {$R *.res}  const  OneInstMutexName       = 'Hi-TekOneInstanceMutex';  OneInstActivateMessage = 'Hi-TekActivateMessage'; var   MutexHandle:      THandle;  ActivateMessage:  Cardinal;  procedure HaltProgram;begin  try    if MutexHandle <> 0      then CloseHandle(MutexHandle);  except   end;   Halt;end; function IsNextInstance:Boolean;begin  Result:= False;  MutexHandle:= 0;  MutexHandle:= CreateMutex(nil, True, OneInstMutexName);   if MutexHandle <> 0   then begin          if GetLastError = ERROR_ALREADY_EXISTS           then begin                  Result:= True;                  CloseHandle(MutexHandle);                  MutexHandle:= 0;                end;        end;end;  begin  Application.Initialize;   ActivateMessage:= RegisterWindowMessage(OneInstActivateMessage);   if IsNextInstance    then begin           PostMessage(HWND_BROADCAST, ActivateMessage, 0, 0);           HaltProgram();         end;    Application.CreateForm(TMainForm, MainForm);  Application.Run;end.
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 24 марта 2008, 08:38
 Оценка за ответ: 4
 Комментарий к оценке: Мьютекс это хорошо, но если создать временный файл и занять его программой, а при запуске копии, обращаемся к файлу, а он оказывается занятым, т.о. завершаем работу копии. |  Ответ #2. Отвечает эксперт: Feniks Здравствуйте, Hi-tek!А зачем вы обращаетесь к файлу до проверки на копии запуска ? Это не правильно. Сначало надо проверить есть ли уже запущенные копии, и если нет, то тогда делать все остальные необходимые действия.
 А по поводу "Как занять файл программой?", то его следует открывать через потоки Stream с флагом fmShareExclusive. Зайдите на страницу поиска, выберите "Искать в ответах" и введите fmShareExclusive. Вы получите три вопроса в которых приведены примеры по использованию fmShareExclusive.
 
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 24 марта 2008, 16:15
 Оценка за ответ: 4
 |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 24 марта 2008, 14:53; участников в обсуждении: 1. 
|   | Hi-tek (статус: 1-ый класс), 24 марта 2008, 14:53 [#1]:Если создать временный файл и занять его программой, а при запуске копии, обращаемся к файлу, а он оказывается занятым, т.о. завершаем работу копии. Вопрос: Как занять файл программой? |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |