Как обеспечить запуск только одного экземпляра моего приложения?

Есть ли поддержка в Delphi XE VCL для обеспечения работы только одного экземпляра приложения?

Раньше я использовал библиотечный код для управления Mutex, который всегда казался сложным. Когда я начинаю новый проект в Delphi XE, мне интересно, нужно ли мне перекопать этот старый код или уже есть поддержка, встроенная в XE? Или есть еще один простой в применении код, который хорош и современен?

Я использую JCL для этого:

program MyProgram; uses JclAppInst; begin JclAppInstances.CheckSingleInstance; // Added instance checking Application.Initialize; Application.CreateForm(TMainForm, MainForm); Application.Run; end. 

Документация для этого и схема уведомлений приведены в Wiki Wiki .

Вы создаете именованный Mutex при запуске приложения. Проверьте GetLastError чтобы узнать, запущен ли еще один экземпляр.

Поместите этот код сразу после «начала» в вашем DPR-файле. Замените GUID на свой собственный. Когда мне нужна текстовая константа, которая вряд ли будет использоваться для чего-либо еще, я обычно просто нажимаю Ctrl + G, чтобы получить GUID!

 if CreateMutex(nil, True, '6EACD0BF-F3E0-44D9-91E7-47467B5A2B6A') = 0 then RaiseLastOSError; if GetLastError = ERROR_ALREADY_EXISTS then Exit; 

Это может выглядеть так, что код пропускает дескриптор, потому что он не сохраняет возврат CreateMutex . Это не. Windows автоматически освободит дескриптор, когда наше приложение будет прекращено, и это абсолютно нормально с нами.

  • Есть ли ошибка в управлении представлением списка Delphi при использовании пользовательского чертежа?
  • Существуют ли какие-либо инструменты для анализа статического кода для Delphi / Pascal?
  • Антивирус False-положительный в моем исполняемом файле
  • Проблемы с ADC / SBB и INC / DEC в узких петлях на некоторых процессорах
  • Как интегрировать Delphi с Active Directory?
  • Системная ошибка. Код: 8. Недостаточно памяти для обработки этой команды
  • Является ли Delphi «с» ключевым словом плохая практика?
  • Как добавить поддержку колесика мыши к компоненту, сгенерированному из TGraphicControl?
  • Где Chrome хранит файл cookie?
  • Хостинг среды выполнения .NET в программе Delphi
  • Как отправить HTTP-запрос в Delphi 2010 с помощью WinInet
  • Interesting Posts

    Почему Virtual Box не дает мне возможность создавать 64-битные гости?

    Как удалить пустые факторы из граней ggplot2?

    Загрузите изображение с камеры или галереи в WebView

    Как заменить загрузчик GRUB, изнутри Windows?

    OSX: Обнаруживать общесистемные события KeyDown?

    EF5 Code First – Изменение типа столбца с миграцией

    Брандмауэр VirtualBox: ограничить входящие подключения хостов только к гостям

    Автономное приложение Node.js

    Фильтровать файл, когда столбец находится в белом списке

    Проверьте, доступен ли порт на удаленной системе (без telnet)

    Зачем компьютеру меняться по буквам при вводе очень быстро?

    Условное форматирование ячейки на основе значения в 4 смежных ячейках

    NHibernate AliasToBean трансформаторные ассоциации

    Реализация нашего собственного сервера STUN / TURN для приложения WebRTC

    Sudo – есть ли команда, чтобы проверить, есть ли у меня sudo и / или сколько осталось времени?

    Давайте будем гением компьютера.