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

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

название програмы должно быть меньше 8 символов и не содержать в себе upx ? =)

Не. Просто не должно начинаться с "/tmp/upx".
upx, зараза, создаёт временный файл со случайно сгенерированным именем, и запускает уже его. В результате проверка всегда врёт, что другие экземпляры не запущены.

На самом деле это всё - условие аварийного прерывания проверки, при котором возвращается false.
Но оно не будет работать правильно в случае upx'а из за того, что в имя файла-мьютекса добавляется имя екзешника (т. е. случайный мусор в данном случае).

Надо ещё продумать, а то я у себя просто запретил сжимать программу upx'ом: матюкнётся и встанет.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Cheb писал(а):Не. Просто не должно начинаться с "/tmp/upx".
upx, зараза, создаёт временный файл со случайно сгенерированным именем, и запускает уже его. В результате проверка всегда врёт, что другие экземпляры не запущены.

у меня с приведеной строчкой не работает, я её удалил.


Cheb писал(а):Надо ещё продумать, а то я у себя просто запретил сжимать программу upx'ом: матюкнётся и встанет.

а че думать надо использовать, то что сделано специально для этого
YuriPro предложил симафоры (но пример так и не дал), они для этого в принципе созданы (вернее флаг создан), только я еще проверял как это все должно выглядеть
в паскале модуль это модуль ipc использовать надо semop с флагом SEM_UNDO
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

есть же уже готовый компонент для этого!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

как-то там много файликов. я пожалуй на старом останусь =)
Sawer
новенький
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Сообщение Sawer »

а зря...
ставиться как визуальный компонент... просто на форму кинул и все проблемы решены!
Аватара пользователя
Deepthroat
постоялец
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven
Контактная информация:

Сообщение Deepthroat »

А если консоль? Все же, ИМХО, проще был бы вариант "просто в uses модуль указал - и все проблемы решены".
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

Sawer писал(а):есть же уже готовый компонент для этого!

Дурь это какая-то а не компонент, посылать все сообщения при открытии программы "есть такой как я?"
А если первая копия занята очень? Отдельный поток использовать?
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

Я вот тут уже задавался этим вопросом:
viewtopic.php?f=5&t=5187

Использую модуль из второго поста вышеуказанной темы.
Единственная проблема, после блокировки повторного запуска хочу поднять на передний план окно 1'го экземпляра приложения, а как это сделать?
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Сообщение leo_bsv »

Осмелюсь предложить своё достаточно универсальное решение: runonce.pas
Если приложение запущено и пользователь запускает его повторно, модуль не запускает новую программу, а активирует уже работающую, т.е. если она была свёрнута или находилась под другими окнами - поднимет окно поверх всех остальных.
Работает под linux.
Ответить