Название: Как определить запущено приложение или нет? Отправлено: Hort от Ноябрь 20, 2008, 15:13 Как сделать чтобы твое приложение при запуске проверяло - оно уже запущено или нет. И если запущено то передавало переданные аргументы в открытое и зарывалось.
У меня файлы ассоциированы с приложением и хочется, чтобы каждый раз открывалось не новое приложение, а в уже существующем. Название: Re: Как определить запущено приложение или нет? Отправлено: pastor от Ноябрь 20, 2008, 15:22 См:
QtSingleApplication (http://trolltech.com/products/appdev/add-on-products/catalog/4/Utilities/qtsingleapplication/) SingleApplication (http://qt-apps.org/content/show.php/SingleApplication?content=81163) DSingleApplication (http://www.crossplatform.ru/node/761) Название: Re: Как определить запущено приложение или нет? Отправлено: Alex Custov от Ноябрь 20, 2008, 19:25 Как сделать чтобы твое приложение при запуске проверяло - оно уже запущено или нет. И если запущено то передавало переданные аргументы в открытое и зарывалось. У меня файлы ассоциированы с приложением и хочется, чтобы каждый раз открывалось не новое приложение, а в уже существующем. Обычно это делается с помощью IPC, типа DCOP. Но т.к. (в линуксе) нет 100% гарантии того, что запущен хоть какой-то IPC сервис, то самое элементарное что приходит в голову - слушающий TCP сокет. Up: очевидно что-то типа DSingleApplication как показали. Название: Re: Как определить запущено приложение или нет? Отправлено: ритт от Ноябрь 24, 2008, 22:41 * у DSingleApplication имеется существенный недостаток - работа по tcp/ip. среднестатистической секретутке не объяснишь, что программа не запускается из-за отсутсвия прав на добавления исключения брндмауера...
* SingleApplication в данный момент напроч не поддерживает маковку, т.к. это уё?ище ?уй ложит на стандарты. в будущем планируется как-либо обойти это ограничение + дошлифовать ipc для снижения зависимостей * QtSingleApplication всем хорош, использует нативные средства комуникации, но распространяется только под коммерческой лицензией Название: Re: Как определить запущено приложение или нет? Отправлено: Пантер от Ноябрь 25, 2008, 07:14 Интересно, а QtCreator какой метод использует? Просто заметил, что при его запуске в тэмповой папке создается файлик singleapplication (что-то типа того). Вот исходники откроют, посмотрим.
ИМХО, под виндой самый нормальный вариант - открыть файлик и держать его, а при втором запуске пытаться удалить. Вот только под Линухой данный вариант никак не катит. Название: Re: Как определить запущено приложение или нет? Отправлено: Hort от Ноябрь 25, 2008, 10:10 ИМХО, под виндой самый нормальный вариант - открыть файлик и держать его, а при втором запуске пытаться удалить. Вот только под Линухой данный вариант никак не катит. а кстате как в qt заблокировать файл и разрешить например только чтение? в php припоминаю функция специальная была а сдесь?Название: Re: Как определить запущено приложение или нет? Отправлено: Pretorean от Ноябрь 25, 2008, 16:08 ИМХО, под виндой самый нормальный вариант - открыть файлик и держать его, а при втором запуске пытаться удалить. Вот только под Линухой данный вариант никак не катит. а кстате как в qt заблокировать файл и разрешить например только чтение? в php припоминаю функция специальная была а сдесь?Название: Re: Как определить запущено приложение или нет? Отправлено: ритт от Ноябрь 25, 2008, 16:45 мужики, вы бредить начинаете. с каких пор создание/открытие файла стало атомарной операцией? подозреваю, что QtCreator использует локалсокет в качестве ipc, но и это не атомарная операция.
повторюсь: идеальный вариант QtSingleApplication, т.к. использует нативные средства под разными платформами (к примеру, под вендой это будет создание атома для экземпляра - атомарная операция), но он коммерческий; SingleApplication использует системный семафор (также атомарная операция) для проверки на запущенный экземпляр + локалсокет для общения (т.к. через семафор общаться, к сожалению, нельзя), но он не работает под маковкой, т.к. дарвинисты упорно игнорят стандарт posix чуть более поздних редакций (примерно 2001 год - сейчас точно не скажу навскидку) если задача поставлена _только_ как "определить запущено приложение или нет" и не нужно передавать команды запущенному экземпляру, то можно ограничиться системным мутексом. но, как я понял из первого поста, необходимо передавать список файлов для открытия - т.е. команды => ipc Название: Re: Как определить запущено приложение или нет? Отправлено: Грекас от Ноябрь 28, 2008, 13:00 А как сделать так, что б каждый последующий запущенный экземпляр программы проверял, работает ли уже его копия, если работает информировать уже работающую копию программы о том, что ей нужно отобразить себя, если нет - запустить программу.
Название: Re: Как определить запущено приложение или нет? Отправлено: Hort от Ноябрь 28, 2008, 16:26 а ктонибуть знает как изменить название класса окна своего приложения? хочу искать запущенное приложение через FindWindow() (функция WinAPI). но чтобы найти надо передать класс окна, а он у всех Qt приложений по умолчанию "QWidget"
Название: Re: Как определить запущено приложение или нет? Отправлено: ритт от Ноябрь 28, 2008, 19:02 А как сделать так, что б каждый последующий запущенный экземпляр программы проверял, работает ли уже его копия, если работает информировать уже работающую копию программы о том, что ей нужно отобразить себя, если нет - запустить программу. смотри примеры в SingleApplication. вчера пришло в голову как/чем равноценно заменить системный семафор чтобы работало и под маковками тоже - ждите новую версию. Название: Re: Как определить запущено приложение или нет? Отправлено: ритт от Ноябрь 29, 2008, 08:30 так-с, теперь должно и под маковками работать (нужно тестить)...
сегодня-завтра обновлю в "доп.компонентах" и на кутэ-аппзах...хочу ещё пошлифовать немного. а пока что могу превьюху скинуть, если надо. Название: Re: Как определить запущено приложение или нет? Отправлено: ритт от Ноябрь 30, 2008, 01:13 обновил. http://www.qt-apps.org/content/show.php/SingleApplication?content=81163
Название: Re: Как определить запущено приложение или нет? Отправлено: xintrea от Январь 20, 2009, 00:27 если задача поставлена _только_ как "определить запущено приложение или нет" и не нужно передавать команды запущенному экземпляру, то можно ограничиться системным мутексом. А можно поинтересоваться, что имеется в виду под системным мутексом? У меня именно стоит задача просто определить, запущено приложение ии нет. Название: Re: Как определить запущено приложение или нет? Отправлено: ритт от Январь 20, 2009, 05:05 поскольку маковка игнорит общепринятые стандарты, использовать QSystemSemaphore в качестве атома под разными платформами не получилось (версии SA < 1.0). в версии 1.0 используется QSharedMemory - для лока достаточно, а вот для ipc - уже нет :(
посмотри в последней версии SA (кажется, isRunning()) Название: Re: Как определить запущено приложение или нет? Отправлено: Winstrol от Январь 20, 2009, 11:11 мужики, вы бредить начинаете. с каких пор создание/открытие файла стало атомарной операцией? А разве не атомарна? Другое дело медленно, но для этой задачи не принципиально.Название: Re: Как определить запущено приложение или нет? Отправлено: ритт от Январь 20, 2009, 18:52 ну, да. я неверно выразил мысль - имелось в виду, что не всегда невозможность создать/открыть файл говорит о том, что файл уже (не|)существует - нужны доп.проверки. конечно, можно реализовать так, чтобы всегда можно было с уверенностью сказать, что файл (не|)создан, но на главный вопрос - "запущено ли приложение?" - это не даст гарантированного ответа :) в принципе, с другими атомами в линуксах ситуация немногим лучше, но всё же...
|