Как не допустить запуск второй копии программы 11Delphi , Программа и Интерфейс , Приложение своёКак не допустить запуск второй копии программы 11
Автор: Роман Василенко { **** UBPFD *********** by delphibase.endimus.com **** >> Запуск одной копии приложения (Mutex-базированный) Единственная функция Init_Mutex этого модуля (only_one.pas) создает мьютекс с именем, переданным в параметре mid. Возврат: true, если мьютекс создан (запущен первый экземпляр приложения) или false, если уже имеется мьютекс с подобным именем (mid). Особенности: 1. даже при "гибели" приложения все, относящиеся к нему мьютексы удаляются с большой степенью вероятности. 2. Желательно "отметить" приложение в системе так, как указано в примере. При таком подходе Ваше приложение почти со стапроцентной вероятностью не будет запущено два раза. Зависимости: Windows Автор: Роман Василенко, romix@nm.ru, Пятигорск Copyright: Роман Василенко Дата: 14 июня 2002 г. ***************************************************** } unit Only_One; interface function Init_Mutex(mid: string): boolean; implementation uses Windows; var mut: thandle; function mut_id(s: string): string; var f: integer; begin result := s; for f := 1 to length(s) do if result[f] = '\' then result[f] := '_'; end; function Init_Mutex(mid: string): boolean; begin Mut := CreateMutex(nil, false, pchar(mut_id(mid))); Result := not ((Mut = 0) or (GetLastError = ERROR_ALREADY_EXISTS)); end; initialization mut := 0; finalization if mut <> 0 then CloseHandle(mut); end. Пример использования: program MyProgram; uses only_one, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {dm: TDataModule}, Unit3 in 'Unit3.pas' {Form3}, {$R *.RES} const UniqueString = 'MyProgramMutex'; {Может быть любое слово. Желательно латинскими буквами.} begin if not init_mutex(UniqueString) then exit; {Выходим до инициализации, если мьютекс уже есть} Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(Tdm, dm); Application.CreateForm(TForm3, Form3); Application.Run; end. Программный код на Delphi демонстрирует способ предотвращения одновременного запуска нескольких экземпляров приложения. Он использует мьютекс (сокращение от "mutual exclusion", или взаимное исключение) для обеспечения того, что только один экземпляр программы может работать в то же время. Вот шаг за шагом, как это работает:
Код также включает некоторые дополнительные функции:
Эта APPROACH имеет некоторые преимущества:
Однако есть и некоторые потенциальные проблемы:
В целом, этот код-снippet предоставляет основной механизм для предотвращения одновременного запуска нескольких экземпляров приложения в Windows. В статье описана функция Init_Mutex, которая позволяет создать мьютекс с уникальным именем при запуске программы и предотвратить запуск второй копии программы на одном компьютере. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Приложение своё ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |